conan.tools.layout¶
预定义的布局¶
有一些预定义的通用布局,可以在 recipes 中直接使用。
cmake_layout()
: 用于典型 CMake 项目的布局vs_layout()
: 用于典型 Visual Studio 项目的布局basic_layout()
: 用于通用项目的非常基本的布局
预定义的布局使用典型的值定义 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