cmake_layout¶
cmake_layout() 设置 folders 和 cpp 属性,使其遵循典型的 CMake 项目结构。
from conan.tools.cmake import cmake_layout
def layout(self):
cmake_layout(self)
注意
要试用它,可以使用 conan new cmake_lib -d name=hello -d version=1.0 模板。
分配的值取决于将使用的 CMake 生成器。可以使用 tools.cmake.cmaketoolchain:generator [conf] 条目或将它传递给配方中的 cmake_layout(self, cmake_generator) 函数来定义。如果它是多配置生成器(如 Visual Studio 或 Xcode),或者单配置生成器(如 Unix Makefiles),则分配的值不同。
这些是 cmake_layout 分配的值
conanfile.folders.source: src_folder 参数或.(如果未指定)。conanfile.folders.build:build: 如果 CMake 生成器是多配置的。build/Debug或build/Release: 如果 CMake 生成器是单配置的,具体取决于 build_type。可以通过
build_folder参数将字符串“build”定义为其他值。
conanfile.folders.generators:build/generatorsconanfile.cpp.source.includedirs:["include"]conanfile.cpp.build.libdirs和conanfile.cpp.build.bindirs["Release"]或["Debug"]对于多配置 CMake 生成器。.对于单配置 CMake 生成器。
参考¶
- cmake_layout(conanfile, generator=None, src_folder='.', build_folder='build')¶
- 参数:
conanfile – 当前的配方对象。始终使用
self。generator – 允许定义 CMake 生成器。在大多数情况下,不需要传递它,因为它将从配置
tools.cmake.cmaketoolchain:generator获取值,或者它将自动从settings推断生成器。src_folder –
conanfile.folders.source的值,如果您的源代码(和 CMakeLists.txt)位于子文件夹中,请更改它。build_folder – 指定“基本”构建文件夹的名称。默认值为“build”,但如果项目使用该文件夹名称,则可以定义不同的名称
conf¶
cmake_layout 受这些 [conf] 变量影响
tools.cmake.cmake_layout:build_folder_vars 设置、选项、
self.name和self.version以及常量const.xxx的列表,用于自定义conanfile.folders.build文件夹。请参阅下面的 多设置/选项 cmake_layout 部分。tools.cmake.cmake_layout:build_folder (Conan 2.2.0 之后的新功能)(实验性) 将其值用作本地构建的
conanfile.folders.build的基本文件夹。tools.cmake.cmake_layout:test_folder (Conan 2.2.0 之后的新功能)(实验性) 将其值用作 test_package 构建的
conanfile.folders.build的基本文件夹。如果该值为$TMP,Conan 将创建一个临时文件夹并使用它。
多设置/选项 cmake_layout¶
folders.build 和 conanfile.folders.generators 可以自定义,以考虑 settings 和 options,而不仅仅是 build_type。使用 tools.cmake.cmake_layout:build_folder_vars conf 声明设置、选项和/或 self.name 和 self.version 以及用户常量列表
conan install . -c tools.cmake.cmake_layout:build_folder_vars="['settings.compiler', 'options.shared']"
对于前面的示例,cmake_layout 分配的值(安装 Release/static 默认配置)将是
conanfile.folders.build:build/apple-clang-shared_false: 如果 CMake 生成器是多配置的。build/apple-clang-shared_false/Debug: 如果 CMake 生成器是单配置的。
conanfile.folders.generators:build/generators
如果我们使用不同的配置重复之前的安装
conan install . -o shared=True -c tools.cmake.cmake_layout:build_folder_vars="['settings.compiler', 'options.shared']"
cmake_layout 分配的值(安装 Release/shared 配置)将是
conanfile.folders.build:build/apple-clang-shared_true: 如果 CMake 生成器是多配置的。build/apple-clang-shared_true/Debug: 如果 CMake 生成器是单配置的。
conanfile.folders.generators:build-apple-clang-shared_true/generators
因此,我们可以为我们想要安装的任何不同配置保留单独的文件夹。配方属性(如名称和版本)以及用户常量也可以使用
$ conan install . -c tools.cmake.cmake_layout:build_folder_vars="['const.myvalue, 'self.name']"
它将创建类似 build/myvalue-pkgname 的文件夹。
在 CMakeToolchain 生成器生成的 CMakePresets.json 文件也将考虑此 tools.cmake.cmake_layout:build_folder_vars 配置,以为预设生成不同的名称,非常方便地为其中任何一个构建我们的项目,方法是选择所选的预设。