cmake_find_packagegenerator. Go to Integrations/CMake if you want to learn how to integrate your project or recipes with CMake.
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
Findasio.cmake file will be generated.
Variables in Find<PKG-NAME>.cmake¶
<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:
|<PKG-NAME>_FOUND||Set to 1|
|<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
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
B, and at the same time
A depends on
A target will contain automatically the properties of the
C dependency, so
in your CMakeLists.txt file you only need to
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).