本文档翻译自:https://docs.conan.io/en/latest/creating_packages/toolchains.html
工具链是在Conan中与构建系统集成的新的试验性方法。 配方可以定义一个toolchain()
方法,该方法将返回一个对象,该对象可以从当前配置生成文件,供构建系统使用。 Conan生成器提供有关依赖项的信息,而工具链提供Conan settings 和 options以及配方定义的配置到构建系统可以理解的内容的“翻译”。 没有依赖关系的配方不需要生成器,但仍可以使用工具链。
可以在内置工具链中使用以下属性定义工具链:
toolchain = "cmake"
但是在更一般的情况下,如果它需要任何超出默认配置的特定配置:
from conans import CMakeToolchain
def toolchain(self):
tc = CMakeToolchain(self)
# customize toolchain "tc"
return tc
工具链具有一些重要的优点:
- 它们在
conan install
时执行。 它们生成文件而不是命令行参数,从而提供了更好的可重复性和构建调试。 - 他们提供了更好的开发人员体验。 开发人员在本地使用的命令行(例如
cmake ...
)将与conan build
或使用conan create
在缓存中完成的构建实现相同的构建,并带有相同的标志。 - 它们更具可扩展性和可配置性。
工具链实现了大多数构建系统逻辑,而使诸如CMake()
之类的构建助手的工作量减少了,并且基本上充当了构建系统的高级包装器。 这些构建助手的许多现有参数,属性或方法将不可用。 检查每个工具链的文档,以检查相关联的构建助手的可用功能。
from conans import CMakeToolchain, CMake
def toolchain(self):
tc = CMakeToolchain(self)
# customize toolchain "tc"
return tc
def build(self):
# NOTE: This is a simplified helper
# Not all arguments attributes and methods might be available
cmake = CMake(self)