CMakeToolchain:使用 CMakePresets 构建项目¶
在本示例中,我们将学习如何使用 CMakeToolchain、预定义的布局(如 cmake_layout)以及 CMakePresets CMake 功能。
让我们创建一个基于 cmake_exe 模板的 C++ 项目作为示例。
$ conan new cmake_exe -d name=foo -d version=1.0
生成工具链¶
我们项目的 conanfile.py 声明了“CMakeToolchain”生成器。
我们可以调用 conan install 来安装 Release 和 Debug 配置。Conan 将在相应的 *generators* 文件夹中生成一个 conan_toolchain.cmake 文件。
$ conan install .
$ conan install . -s build_type=Debug
使用 CMakePresets 构建项目¶
一个 CMakeUserPresets.json 文件会生成在您的 CMakeLists.txt 文件所在的文件夹中,因此您可以使用 cmake >= 3.23 的 --preset 参数,或者使用支持它的 IDE。
生成的 CMakeUserPresets.json 会包含位于相应 *generators* 文件夹中的 CMakePresets.json 文件。
生成的 CMakePresets.json 包含了 conan_toolchain.cmake 的位置信息,甚至还包含设置了输出目录的 binaryDir。
注意
我们在本例中使用 CMake presets。这需要 CMake >= 3.23,因为 CMakeUserPresets.json 到 CMakePresets.json 的“include”功能自该版本起才受支持。如果您不想使用 presets,可以使用类似以下的方式:
cmake <path> -G <CMake generator> -DCMAKE_TOOLCHAIN_FILE=<path to
conan_toolchain.cmake> -DCMAKE_BUILD_TYPE=Release
如果您无法使用预设功能,Conan 将在每次运行 conan install 时显示确切的 CMake 命令。
如果您正在使用多配置生成器
$ cmake --preset conan-default
$ cmake --build --preset conan-debug
$ build\Debug\foo.exe
foo/1.0: Hello World Release!
$ cmake --build --preset conan-release
$ build\Release\foo.exe
foo/1.0: Hello World Release!
如果您正在使用单配置生成器
$ cmake --preset conan-debug
$ cmake --build --preset conan-debug
$ ./build/Debug/foo
foo/1.0: Hello World Debug!
$ cmake --preset conan-release
$ cmake --build --preset conan-release
$ ./build/Release/foo
foo/1.0: Hello World Release!
请注意,我们不需要创建 build/Release 或 build/Debug 文件夹,正如我们在 教程中 所做的那样。输出目录由 cmake_layout() 声明,并由 CMake Presets 功能自动管理。
当您在 Conan 缓存中构建包时(使用 conan create 命令),Conan 也会自动管理此行为(需要 CMake >= 3.15)。此时不需要 CMake >= 3.23。
阅读更多
cmake_layout()参考Conanfile layout() 方法参考
包布局教程 教程
理解 Conan 包布局