conan.tools.build

构建

conan.tools.build.build_jobs()

build_jobs(conanfile)

返回可用于并行构建的 CPU 数量。如果存在,则返回配置值 tools.build:jobs,否则,它默认为辅助函数 _cpu_count()_cpu_count() 读取 cgroup 以检测配置的 CPU 数量。目前,有两种版本的 cgroup 可用。

在 cgroup v1 的情况下,如果 cgroup 中的数据无效,则会进行处理器检测。每当未启用处理器检测时,build_jobs() 将安全地返回 1。

在 cgroup v2 的情况下,如果没有设置限制,则使用处理器检测。当设置了限制时,行为与 cgroup v1 中描述的一样。

参数:

conanfile – 当前的配方对象。始终使用 self

返回:

int 表示作业数量

conan.tools.build.cross_building()

cross_building(conanfile=None, skip_x64_x86=False)

比较构建主机设置,检查我们是否正在进行交叉构建。如果正在进行交叉构建,则返回 True

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • skip_x64_x86 – 在从 64 位构建到 32 位时(例如 x86_64 到 x86、sparcv9 到 sparc 或 ppc64 到 ppc32)不要将构建视为交叉构建。

返回:

bool 值来自 tools.build.cross_building:cross_build(如果存在),否则,如果正在进行交叉构建,则返回 True,否则返回 False

conan.tools.build.can_run()

can_run(conanfile)

验证是否可以在相同架构上运行非本机应用程序。对于您的架构可以运行多个目标的情况,这是一个有用的功能。例如,Mac M1 机器可以运行 armv8x86_64

参数:

conanfile – 当前的配方对象。始终使用 self

返回:

bool 值来自 tools.build.cross_building:can_run(如果存在),否则,如果正在进行交叉构建,则返回 False,否则返回 True

Cppstd

conan.tools.build.check_min_cppstd()

check_min_cppstd(conanfile, cppstd, gnu_extensions=False)

检查当前的 cppstd 是否符合所需的最低版本。

如果当前的 cppstd 不符合 cppstd 所需的最低版本,将引发 ConanInvalidConfiguration 异常。

settings.compiler.cppstd 必须已定义,否则会引发 ConanInvalidConfiguration 异常

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • cppstd – 所需的最低 cppstd 版本

  • gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)

conan.tools.build.check_max_cppstd()

check_max_cppstd(conanfile, cppstd, gnu_extensions=False)

检查当前的 cppstd 是否符合所需的最高版本。

如果当前的 cppstd 不符合 cppstd 所需的最高版本,将引发 ConanInvalidConfiguration 异常。

settings.compiler.cppstd 必须已定义,否则会引发 ConanInvalidConfiguration 异常

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • cppstd – 所需的最高 cppstd 版本

  • gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)

conan.tools.build.valid_min_cppstd()

valid_min_cppstd(conanfile, cppstd, gnu_extensions=False)

验证当前的 cppstd 是否符合所需的最低版本。

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • cppstd – 所需的最低 cppstd 版本

  • gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)。此选项仅适用于 Linux。

返回:

如果当前的 cppstd 与所需的 cppstd 版本匹配,则返回 True。否则,返回 False。

conan.tools.build.valid_max_cppstd()

valid_max_cppstd(conanfile, cppstd, gnu_extensions=False)

验证当前的 cppstd 是否符合所需的最高版本。

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • cppstd – 所需的最高 cppstd 版本

  • gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)。此选项仅适用于 Linux。

返回:

如果当前的 cppstd 与所需的 cppstd 版本匹配,则返回 True。否则,返回 False。

conan.tools.build.default_cppstd()

default_cppstd(conanfile, compiler=None, compiler_version=None)

获取“conanfile.settings.compiler”和“conanfile settings.compiler_version”或参数“compiler”和“compiler_version”(如果已指定)的默认 compiler.cppstd

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • compiler – 编译器名称,例如 gcc

  • compiler_version – 编译器版本,例如 12

返回:

指定编译器的默认 compiler.cppstd

conan.tools.build.supported_cppstd()

supported_cppstd(conanfile, compiler=None, compiler_version=None)

获取“conanfile.settings.compiler”和“conanfile.settings.compiler_version”或参数“compiler”和“compiler_version”(如果已指定)的受支持的 compiler.cppstd 列表。

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • compiler – 编译器名称,例如:gcc

  • compiler_version – 编译器版本,例如:12

返回:

受支持的 cppstd 值列表。

conan.tools.build.cppstd_flag()

cppstd_flag(conanfile) str

根据 conanfile.settings.compilerconanfile.settings.compiler.versionconanfile.settings.compiler.cppstd 返回特定于 C++ 标准的标志。

它还会考虑在 settings.compiler.cppstd 中使用 GNU 扩展的情况,并在编译器标志中反映出来。目前,它支持 GCC、Clang、AppleClang、MSVC、Intel、MCST-LCC。

如果配置文件中没有 settings.compilersettings.cppstd,则结果将是 空字符串

参数:

conanfile – 当前的配方对象。始终使用 self

返回:

str 表示编译器使用的标准 C++ 标志。例如,“-std=c++11”、“/std:c++latest”

cstd

警告

此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。

conan.tools.build.check_min_cstd()

check_min_cstd(conanfile, cstd, gnu_extensions=False)

检查当前的 cstd 是否符合所需的最低版本。

如果当前的 cstd 不符合 cstd 所需的最低版本,将引发 ConanInvalidConfiguration 异常。

  1. 如果 settings.compiler.cstd,该工具将使用 settings.compiler.cstd 进行比较

  2. 如果不是 settings.compiler.cstd,该工具将使用编译器进行比较(从 cstd_default 读取)

  3. 如果不存在 settings.compiler(未在设置中声明),将引发异常,因为它无法进行比较。

  4. 如果无法检测 settings.compiler 的默认 cstd,将引发异常。

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • cstd – 所需的最低 cstd 版本

  • gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)

conan.tools.build.check_max_cstd()

check_max_cstd(conanfile, cstd, gnu_extensions=False)

检查当前的 cstd 是否符合所需的最高版本。

如果当前的 cstd 不符合 cstd 所需的最高版本,将引发 ConanInvalidConfiguration 异常。

  1. 如果 settings.compiler.cstd,该工具将使用 settings.compiler.cstd 进行比较

  2. 如果不是 settings.compiler.cstd,该工具将使用编译器进行比较(从 cstd_default 读取)

  3. 如果不存在 settings.compiler(未在设置中声明),将引发异常,因为它无法进行比较。

  4. 如果无法检测 settings.compiler 的默认 cstd,将引发异常。

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • cstd – 所需的最高 cstd 版本

  • gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)

conan.tools.build.valid_min_cstd()

valid_min_cstd(conanfile, cstd, gnu_extensions=False)

验证当前的 cstd 是否符合所需的最低版本。

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • cstd – 所需的最低 cstd 版本

  • gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)。此选项仅适用于 Linux。

返回:

gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)。此选项仅适用于 Linux。

如果当前的 cstd 与所需的 cstd 版本匹配,则返回 True。否则,返回 False。

conan.tools.build.valid_max_cstd()

valid_max_cstd(conanfile, cstd, gnu_extensions=False)

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • cstd – 所需的最高 cstd 版本

  • gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)。此选项仅适用于 Linux。

返回:

gnu_extensions – 是否需要 GNU 扩展(例如 gnu17)。此选项仅适用于 Linux。

验证当前的 cstd 是否符合所需的最高版本。

conan.tools.build.default_cstd()

default_cstd(conanfile, compiler=None, compiler_version=None)

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • compiler – 编译器名称,例如 gcc

  • compiler_version – 编译器版本,例如 12

返回:

获取“conanfile.settings.compiler”和“conanfile settings.compiler_version”或参数“compiler”和“compiler_version”(如果已指定)的默认 compiler.cstd

指定编译器的默认 compiler.cstd

conan.tools.build.supported_cstd()

supported_cstd(conanfile, compiler=None, compiler_version=None)

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • compiler – 编译器名称,例如:gcc

  • compiler_version – 编译器版本,例如:12

返回:

获取“conanfile.settings.compiler”和“conanfile.settings.compiler_version”或参数“compiler”和“compiler_version”(如果已指定)的受支持的 compiler.cstd 列表。

编译器

conan.tools.build.check_min_compiler_version()

警告

此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。

check_min_compiler_version(conanfile, compiler_restrictions)

(实验性) 检查当前编译器及其版本是否满足最低要求。

参数:
  • conanfile – 当前的配方对象。始终使用 self

  • compiler_restrictions

    一个元组列表,每个元组包含

    • compiler (str): 编译器名称 (例如 “gcc”, “msvc”)。

    • min_version (str): 最小所需版本,字符串形式 (例如 “14”, “19.0”)。

    • reason (str): 解释版本要求的字符串。

抛出:
  • ConanException – 如果未定义 ‘compiler’ 或 ‘compiler.version’ 设置。

  • ConanInvalidConfiguration – 如果找到的编译器版本低于该编译器的指定最小版本。

示例:
def validate(self):
    compiler_restrictions = [
        ("clang", "14", "requires C++20 coroutines support"),
        ("gcc", "12", "requires C++20 modules support")
    ]
    check_min_compiler_version(self, compiler_restrictions)