本文档翻译自:https://docs.conan.io/en/latest/creating_packages/toolchains.html

    工具链是在Conan中与构建系统集成的新的试验性方法。 配方可以定义一个toolchain()方法,该方法将返回一个对象,该对象可以从当前配置生成文件,供构建系统使用。 Conan生成器提供有关依赖项的信息,而工具链提供Conan settings 和 options以及配方定义的配置到构建系统可以理解的内容的“翻译”。 没有依赖关系的配方不需要生成器,但仍可以使用工具链。

    可以在内置工具链中使用以下属性定义工具链:

    1. toolchain = "cmake"


    但是在更一般的情况下,如果它需要任何超出默认配置的特定配置:

    1. from conans import CMakeToolchain
    2. def toolchain(self):
    3. tc = CMakeToolchain(self)
    4. # customize toolchain "tc"
    5. return tc

    工具链具有一些重要的优点:

    • 它们在 conan install 时执行。 它们生成文件而不是命令行参数,从而提供了更好的可重复性和构建调试。
    • 他们提供了更好的开发人员体验。 开发人员在本地使用的命令行(例如cmake ...)将与conan build或使用conan create在缓存中完成的构建实现相同的构建,并带有相同的标志。
    • 它们更具可扩展性和可配置性。

    工具链实现了大多数构建系统逻辑,而使诸如CMake()之类的构建助手的工作量减少了,并且基本上充当了构建系统的高级包装器。 这些构建助手的许多现有参数,属性或方法将不可用。 检查每个工具链的文档,以检查相关联的构建助手的可用功能。

    1. from conans import CMakeToolchain, CMake
    2. def toolchain(self):
    3. tc = CMakeToolchain(self)
    4. # customize toolchain "tc"
    5. return tc
    6. def build(self):
    7. # NOTE: This is a simplified helper
    8. # Not all arguments attributes and methods might be available
    9. cmake = CMake(self)