CMakeToolchain:使用 CMakePresets 构建您的项目

在此示例中,我们将了解如何使用 CMakeToolchain、预定义布局(如 cmake_layout)以及 CMakePresets CMake 功能。

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

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

生成工具链

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

我们可以调用 conan install 来安装 ReleaseDebug 两种配置。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.jsonCMakePresets.json 的“include”功能仅在该版本之后才受支持。如果您不想使用预设,可以使用类似以下的方式:

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/Releasebuild/Debug 文件夹,就像我们 在教程中 所做的那样。输出目录由 cmake_layout() 声明,并由 CMake Presets 功能自动管理。

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

阅读更多