CMakeToolchain:使用 CMakePresets 构建你的项目¶
在这个例子中,我们将看到如何使用 CMakeToolchain
,预定义的布局,如 cmake_layout
,以及 CMakePresets
CMake 功能。
让我们创建一个基于模板 cmake_exe
的基本项目,作为 C++ 项目的示例
$ conan new cmake_exe -d name=foo -d version=1.0
生成工具链¶
我们项目的配方声明了生成器 “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 预设。这需要 CMake >= 3.23,因为从 CMakeUserPresets.json
到 CMakePresets.json
的 “include” 仅自该版本开始支持。如果你不想使用预设,可以使用类似这样的命令:
cmake <path> -G <CMake generator> -DCMAKE_TOOLCHAIN_FILE=<path to
conan_toolchain.cmake> -DCMAKE_BUILD_TYPE=Release
每次你运行 conan install
时,Conan 都会显示精确的 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 预设功能自动管理。
当你使用 conan create 命令在 Conan 缓存中构建包时,此行为也由 Conan 自动管理(使用 CMake >= 3.15)。不需要 CMake >= 3.23。
阅读更多
cmake_layout()
参考Conanfile layout() 方法参考
包布局教程 教程
理解 Conan 包布局