cmake_find_package
This is the reference page for cmake_find_package
generator.
Go to Integrations/CMake if you want to learn how to integrate your project or recipes with CMake.
The cmake_find_package
generator creates a file for each requirement specified in the conanfile.
The name of the files follow the pattern Find<PKG-NAME>.cmake
. So for the asio/1.14.0
package,
a Findasio.cmake
file will be generated.
Variables in Find<PKG-NAME>.cmake
Being <PKG-NAME>
the package name used in the reference (by default) or the one declared in cpp_info.name
or in
cpp_info.names["cmake_find_package"]
if specified:
NAME |
VALUE |
---|---|
<PKG-NAME>_FOUND |
Set to 1 |
<PKG-NAME>_VERSION |
Package version |
<PKG-NAME>_INCLUDE_DIRS |
Containing all the include directories of the package |
<PKG-NAME>_INCLUDES |
Same as the XXX_INCLUDE_DIRS |
<PKG-NAME>_DEFINITIONS |
Definitions of the library |
<PKG-NAME>_LIBS |
Library paths to link |
<PKG-NAME>_LIBRARIES |
Same as <PKG-NAME>_LIBS |
<PKG-NAME>_BUILD_MODULES |
List of CMake module files with functionalities for consumers |
<PKG-NAME>_SYSTEM_LIBS |
System libraries to link |
<PKG-NAME>_FRAMEWORKS |
Framework names to do a find_library() |
<PKG-NAME>_FRAMEWORKS_FOUND |
Found frameworks to link with after find_library() |
<PKG-NAME>_FRAMEWORK_DIRS |
Framework directories to perform the find_library() of <PKG-NAME>_FRAMEWORKS |
This file uses <PKG-NAME>_BUILD_MODULES values to include the files using the include(…) CMake directive. This makes functions or utilities exported by the package available for consumers just by setting find_package(<PKG-NAME>) in the CMakeLists.txt.
Moreover, this also adjusts CMAKE_MODULE_PATH and CMAKE_PREFIX_PATH to the values declared by the package in cpp_info.buildirs
, so
modules in those directories can be found.
Targets in Find<PKG-NAME>.cmake
A target named <PKG-NAME>::<PKG-NAME>
target is generated with the following properties adjusted:
INTERFACE_INCLUDE_DIRECTORIES
: Containing all the include directories of the package.INTERFACE_LINK_LIBRARIES
: Library paths to link.INTERFACE_COMPILE_DEFINITIONS
: Definitions of the library.
The targets are transitive. So, if your project depends on a packages A
and B
, and at the same time
A
depends on C
, the A
target will contain automatically the properties of the C
dependency, so
in your CMakeLists.txt file you only need to find_package(A)
and find_package(B)
.
Components
If a recipe uses components, the targets generated will be <PKG-NAME>::<COMP-NAME>
with the following properties adjusted:
INTERFACE_INCLUDE_DIRECTORIES
: Containing all the include directories of the component.INTERFACE_LINK_DIRECTORIES
: Containing all the lib directories of the component.INTERFACE_LINK_LIBRARIES
: Containing the targets to link the component to (includes component’s libraries and dependencies).INTERFACE_COMPILE_DEFINITIONS
: Containing the definitions of the component.INTERFACE_COMPILE_OPTIONS
: Containing the compile options of the component.
Moreover, a global target <PKG-NAME>::<PKG-NAME>
will be declared with the following properties adjusted:
INTERFACE_LINK_LIBRARIES
: Containing all the component targets to link the global target to (includes package’s components only).