CMake dependency provider for the Conan C and C++ package manager.
⚠️ Important: Conan 2 is the recommended production version for cmake-conan . |
---|
The cmake-conan integration in this develop2 branch for Conan 2 using CMake dependency providers, even if not released as 1.0 yet, is more stable, production-ready and recommended than the legacy cmake-conan for Conan 1. Please update to Conan 2 and the new cmake-conan integration in this develop2 branch. |
Prerequisites:
conanfile.txt
or conanfile.py
to list the required dependencies.First, clone this repository in the develop2
branch.
git clone https://github.com/conan-io/cmake-conan.git -b develop2
This repository contains a CMakeLists.txt
with an example project that depends on fmt
.
cd cmake-conan/example
mkdir build
cmake -B build -S . -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=../conan_provider.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release
Ensure you have placed a conanfile.txt
or conanfile.py
at the root of your project, listing your requirements. You can see conanfile.txt for an example, or check the Conan documentation for conanfile
: .txt docs, .py docs.
When first invoking CMake to configure the project, pass -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=[path-to-cmake-conan]/conan_provider.cmake
. This will ensure that conan install
is invoked from within CMake. This integration does not require making any changes to your CMakeLists.txt
scripts.
cd [your-project]
mkdir build
cmake -B build -S . -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=[path-to-cmake-conan]/conan_provider.cmake -DCMAKE_BUILD_TYPE=Release
CMakeDeps
generator is specified - for build settings that would otherwise be provided by CMakeToolchain
(for example, the compiler itself or other global build settings) please invoke Conan separately as per documentation.find_package
. For dependencies that have logic outside of find_package
, for example, by making direct calls to find_program
, find_library
, find_path
or find_file
, these may not work correctly.CMAKE_BUILD_TYPE
(can't be left blank)The CMake-Conan dependency provider will create a Conan profile where the settings (os
, arch
, compiler
, build_type
) are retrieved from what CMake has detected for the current build. Conan uses two profiles for dependencies, the host and the build profiles. You can read more about them here. In CMake-Conan, the default behaviour is as follows:
default
Conan profile.default
Conan profile.Please note that for the above to work, a default
profile must already exist. If it doesn't, cmake-conan
will invoke Conan's autodetection mechanism which tries to guess the system defaults.
If you need to customize the profile, you can do so by modifying the value of CONAN_HOST_PROFILE
and CONAN_BUILD_PROFILE
and passing them as CMake cache variables. Some examples:
-DCONAN_HOST_PROFILE="default;auto-cmake"
: perform autodetection as described above, and fallback to the default profile for anything else (default behaviour).-DCONAN_HOST_PROFILE=clang16
: do not perform autodetection, and use the clang16
profile which must exist in the Conan profiles folder (see docs.)-DCONAN_BUILD_PROFILE="/path/to/profile"
: alternatively, provide a path to a profile file that may be anywhere in the filesystem.-DCONAN_HOST_PROFILE="default;custom"
: semi-colon separated list of profiles. A compound profile will be used (see docs) - compunded from left to right, where right has the highest priority.The CMake-Conan dependency provider will autodetect and pass the profile information as described above. If the conan install
command invocation needs to be customized further, the CONAN_INSTALL_ARGS
variable can be used.
CONAN_INSTALL_ARGS
is initialised to pass --build=missing
. If you customize this variable, please be aware that Conan will revert to its default behaviour unless you specify the --build
flag.conanfile.txt|.py
, and the output format (--format
).--build=never;--update;--lockfile-out=''
There are some tests, you can run in python, with pytest, for example:
$ pytest -rA