cmake_find_package_multi

Warning

This is an experimental feature subject to breaking changes in future releases.

This is the reference page for cmake_find_package_multi generator. Go to Integrations/CMake if you want to learn how to integrate your project or recipes with CMake.

Generated files

For each conan package in your graph, it will generate 2 files and 1 more per different build_type. Being {name} the package name:

NAME

CONTENTS

{name}Config.cmake

It includes the {name}Targets.cmake and call find_dependency for each dep

{name}Targets.cmake

It includes the following files

{name}Targets-debug.cmake

Specific information for the Debug configuration

{name}Targets-release.cmake

Specific information for the Release configuration

{name}Targets-relwithdebinfo.cmake

Specific information for the RelWithDebInfo configuration

{name}Targets-minsizerel.cmake

Specific information for the MinSizeRel configuration

Targets

A target named {name}::{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 contains multi-configuration properties, for example, the compile options property is declared like this:

set_property(TARGET {name}::{name}
         PROPERTY INTERFACE_COMPILE_OPTIONS
             $<$<CONFIG:Release>:${{{name}_COMPILE_OPTIONS_RELEASE_LIST}}>
             $<$<CONFIG:RelWithDebInfo>:${{{name}_COMPILE_OPTIONS_RELWITHDEBINFO_LIST}}>
             $<$<CONFIG:MinSizeRel>:${{{name}_COMPILE_OPTIONS_MINSIZEREL_LIST}}>
             $<$<CONFIG:Debug>:${{{name}_COMPILE_OPTIONS_DEBUG_LIST}}>)

The targets are also 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 CONFIG) and find_package(B CONFIG).

Important

Add the CONFIG option to find_package so that module mode is explicitly skipped by CMake. This helps to solve issues when there is for example a FindXXXX.cmake file in CMake’s default modules directory that could be loaded instead of the XXXXConfig.cmake generated by Conan.

You also need to adjust CMAKE_PREFIX_PATH and CMAKE_MODULE_PATH so CMake can locate all the {name}Config.cmake files: The CMAKE_PREFIX_PATH is used by the find_package and the CMAKE_MODULE_PATH is used by the find_dependency calls that locates the transitive dependencies.