conan.tools.layout

预定义的布局

这里有一些预定义的通用 布局,可以简单地在 recipe 中使用

预定义的布局使用典型值定义 Conanfile 的 .folders.cpp 属性。要查看这些预定义的布局设置了哪些值,请查看 layout() 方法的参考文档。例如,在 cmake_layout() 中,源文件夹设置为 ".",这意味着 Conan 将期望在 conanfile 所在的同一目录中找到源文件(最有可能的是项目根目录,通常可以在那里找到 CMakeLists.txt 文件)。如果你的 CMakeLists.txt 文件位于不同的文件夹中,则可以使用 src_folder 参数

from conan.tools.cmake import cmake_layout

def layout(self):
    cmake_layout(self, src_folder="mysrcfolder")

即使此预定义的布局不适合你的特定项目布局,检查它们如何实现其逻辑也会展示你如何实现自己的逻辑(并且如果你要在多个软件包中使用它,则可以将其放在通用的 python_require 中)。

要了解有关布局以及在开发软件包时如何使用它们的更多信息,请查看 Conan 软件包布局 教程

basic_layout

用法

from conan.tools.layout import basic_layout

def layout(self):
    basic_layout(self)

当前布局实现非常简单,基本上为不同的 build_type 设置不同的构建文件夹,并将生成器的输出文件夹设置在构建文件夹内。这样,我们可以避免在本地工作时使项目变得混乱。

def basic_layout(conanfile, src_folder="."):
    conanfile.folders.build = "build"
    if conanfile.settings.get_safe("build_type"):
        conanfile.folders.build += "-{}".format(str(conanfile.settings.build_type).lower())
    conanfile.folders.generators = os.path.join(conanfile.folders.build, "conan")
    conanfile.cpp.build.bindirs = ["."]
    conanfile.cpp.build.libdirs = ["."]
    conanfile.folders.source = src_folder