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” 字符串可以通过
build_folder
参数定义为其他值。
conanfile.folders.generators
:build/generators
conanfile.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:用于自定义
conanfile.folders.build
文件夹的设置、选项、self.name
和self.version
以及常量const.xxx
的列表。请参阅下面的 多设置/选项 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']"
对于前面的示例,(安装 Release/static 默认配置)通过 cmake_layout
分配的值将是:
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']"
(安装 Release/shared 配置)通过 cmake_layout
分配的值将是:
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
配置,为预设生成不同的名称,这非常方便安装 N 个配置并通过选择选定的预设为我们的项目构建任何一个。