CMake

CMake 构建助手是围绕 cmake 命令行调用的包装器。它将抽象像 cmake --build . --config Release 这样的调用转换为 Python 方法调用。它还会将参数 -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake(来自生成器 CMakeToolchain)添加到 configure() 调用中,以及其他可能的参数,如 -DCMAKE_BUILD_TYPE=<config>。使用的参数是从生成的 CMakePresets.json 文件中获取的。

该助手旨在在 build() 方法中使用,以便在 Conan 直接构建包(创建、安装)时自动调用 CMake 命令。

from conan import ConanFile
from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps

class App(ConanFile):
    settings = "os", "arch", "compiler", "build_type"
    requires = "hello/0.1"
    options = {"shared": [True, False], "fPIC": [True, False]}
    default_options = {"shared": False, "fPIC": True}

    def generate(self):
        tc = CMakeToolchain(self)
        tc.generate()
        deps = CMakeDeps(self)
        deps.generate()

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

参考

class CMake(conanfile)

CMake 助手,用于与 CMakeToolchain 功能一起使用。

参数:

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

configure(variables=None, build_script_folder=None, cli_args=None, stdout=None, stderr=None)

读取由 CMakeToolchain 生成的 CMakePresets.json 文件以获取

  • 生成器,以追加 -G="xxx"

  • 工具链的路径并追加 -DCMAKE_TOOLCHAIN_FILE=/path/conan_toolchain.cmake

  • 声明的 cache variables 并追加 -Dxxx

并调用 cmake

参数:
  • variables – 应为 CMake 变量和值的字典,它们将映射到命令行 -DVAR=VALUE 参数。请记住,在一般情况下,传递给 CMake 的信息应在 CMakeToolchain 中传递,以便在 conan_toolchain.cmake 文件中提供。此 variables 参数用于不会在工具链方法中起作用的特殊情况。

  • build_script_folder – CMakeLists.txt 的路径,如果它不在 layout() 方法中声明的 self.folders.source 中。

  • cli_args – 将作为额外 CLI 参数传递给 cmake 调用的参数列表 [arg1, arg2, ...]

  • stdout – 使用它将标准输出重定向到此流。

  • stderr – 使用它将标准错误重定向到此流。

build(build_type=None, target=None, cli_args=None, build_tool_args=None, stdout=None, stderr=None)
参数:
  • build_type – 仅用于覆盖在 settings.build_type 中定义的值,以用于多配置生成器(例如 Visual Studio、XCode)。此值将被单配置生成器忽略,它们将使用在安装步骤期间工具链文件中定义的值。

  • target – 作为字符串的单个构建目标的名称,或者作为字符串列表中要传递给 --target 参数的多个构建目标的名称。

  • cli_args – 将直接传递给 cmake --build ... arg1 arg2 命令的参数列表 [arg1, arg2, ...]

  • build_tool_args – 用于底层构建系统的参数列表 [barg1, barg2, ...],它将在 -- 指示符之后传递到命令行:cmake --build ... -- barg1 barg2

  • stdout – 使用它将标准输出重定向到此流。

  • stderr – 使用它将标准错误重定向到此流。

install(build_type=None, component=None, cli_args=None, stdout=None, stderr=None)

相当于运行 cmake --build . --target=install

参数:
  • component – 要安装的特定组件(如果有)。

  • build_type – 仅用于覆盖 settings.build_type 中定义的值。如果构建是单配置(例如 Unix Makefiles),则它可能会失败,因为在这种情况下,必须在配置时指定构建类型,而不是构建时。

  • cli_args – 用于底层构建系统的参数列表 [arg1, arg2, ...],它将传递到命令行:cmake --install ... arg1 arg2

  • stdout – 使用它将标准输出重定向到此流。

  • stderr – 使用它将标准错误重定向到此流。

test(build_type=None, target=None, cli_args=None, build_tool_args=None, env='', stdout=None, stderr=None)

相当于运行 cmake –build . –target=RUN_TESTS。

参数:
  • build_type – 仅用于覆盖 settings.build_type 中定义的值。如果构建是单配置(例如 Unix Makefiles),则它可能会失败,因为在这种情况下,必须在配置时指定构建类型,而不是构建时。

  • target – 要运行的构建目标的名称,默认为 RUN_TESTStest

  • cli_args – 与上面的 build() 相同,一个参数列表 [arg1, arg2, ...],作为底层构建系统的额外参数传递。

  • build_tool_args – 与上面的 build() 相同。

  • stdout – 使用它将标准输出重定向到此流。

  • stderr – 使用它将标准错误重定向到此流。

ctest(cli_args=None, env='', stdout=None, stderr=None)

相当于运行 ctest …

参数:
  • cli_args – 传递给 ctest 命令行作为额外参数的列表 [arg1, arg2, ...]

  • env – 要激活的环境文件,默认情况下为 conanbuild 和 conanrun

  • stdout – 使用它将标准输出重定向到此流。

  • stderr – 使用它将标准错误重定向到此流。

conf

CMake() 构建助手受以下 [conf] 变量影响

  • tools.build:verbosity 将接受 quietverbose 之一,传递给 CMake.build() 命令,当使用 Visual Studio 生成器(MSBuild 构建系统)构建 CMake 时。它作为参数通过调用 cmake --build . --config Release -- /verbosity:Diagnostic 传递给底层构建系统。

  • tools.compilation:verbosity 将接受 quietverbose 之一,传递给 CMake,如果为 verbose 则设置 -DCMAKE_VERBOSE_MAKEFILE

  • tools.build:jobs 参数用于运行 Ninja 生成器时的 --jobs 参数。

  • tools.microsoft.msbuild:max_cpu_count 参数用于运行 MSBuild 时的 /m (/maxCpuCount)。

  • tools.cmake:cmake_program 指定 CMake 可执行文件的路径,而不是使用 PATH 中找到的路径。

  • tools.cmake:install_strip 如果设置为 True,则将 --strip 传递给 cmake --install 调用。