CMakeToolchain:使用 CMakePresets 构建项目

在本示例中,我们将看到如何使用 CMakeToolchain、预定义布局(如 cmake_layout)以及 CMakePresets 这个 CMake 特性。

让我们创建一个基于模板 cmake_exe 的基本项目,作为 C++ 项目的示例。

$ conan new cmake_exe -d name=foo -d version=1.0

生成工具链

我们项目的 recipe 声明了生成器“CMakeToolchain”。

我们可以调用 conan install 来安装 ReleaseDebug 配置。Conan 将在相应的 generators 目录中生成一个 conan_toolchain.cmake 文件。

$ conan install .
$ conan install . -s build_type=Debug

使用 CMakePresets 构建项目

在与你的 CMakeLists.txt 文件相同的目录中会生成一个 CMakeUserPresets.json 文件,这样你就可以使用 cmake >= 3.23--preset 参数或使用支持它的 IDE。

通过 CMakeUserPresets.json 包含了位于相应 generators 目录中的 CMakePresets.json 文件。

通过 CMakePresets.json 包含关于 conan_toolchain.cmake 位置的信息,甚至是用输出目录设置的 binaryDir

注意

在本示例中我们使用了 CMake presets。这需要 CMake >= 3.23,因为从 CMakeUserPresets.jsonCMakePresets.json 的“include”功能自该版本起才受支持。如果你不想使用 presets,你可以使用类似如下的方式:

cmake <path> -G <CMake generator> -DCMAKE_TOOLCHAIN_FILE=<path to
conan_toolchain.cmake> -DCMAKE_BUILD_TYPE=Release

如果你无法使用 presets 功能,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/Releasebuild/Debug 目录,这与我们在 教程中 所做不同。输出目录由 cmake_layout() 声明,并由 CMake Presets 功能自动管理。

当你在 Conan 缓存中构建包时(使用 conan create 命令),Conan(使用 CMake >= 3.15)也会自动管理此行为。CMake >= 3.23 不是必需的。

阅读更多