BazelToolchain

警告

此功能为实验性功能,可能会有破坏性变更。有关更多信息,请参阅 Conan 稳定性 部分。

BazelToolchain 是 Bazel 的工具链生成器。它将生成一个 conan_bzl.rc 文件,其中包含一个构建配置 conan-config,用于将所有参数注入到 bazel build 命令中。

BazelToolchain 生成器可以在 conanfile 中通过名称使用

conanfile.py
class Pkg(ConanFile):
    generators = "BazelToolchain"
conanfile.txt
[generators]
BazelToolchain

并且它也可以在 conanfile 的 generate() 方法中完全实例化

conanfile.py
from conan import ConanFile
from conan.tools.google import BazelToolchain

class App(ConanFile):
    settings = "os", "arch", "compiler", "build_type"

    def generate(self):
        tc = BazelToolchain(self)
        tc.generate()

生成的文件

运行 conan install 命令后,BazelToolchain 会生成 *conan_bzl.rc* 文件,其中包含 Bazel 构建参数(这将取决于您当前 Conan 设置和来自 *default* profile 的选项)

conan_bzl.rc
# Automatic bazelrc file created by Conan

build:conan-config --cxxopt=-std=gnu++17

build:conan-config --dynamic_mode=off
build:conan-config --compilation_mode=opt

Bazel 构建助手 将使用该 conan_bzl.rc 文件来使用此配置执行调用。输出命令将如下所示:bazel --bazelrc=/path/to/conan_bzl.rc build --config=conan-config <target>

参考

class BazelToolchain(conanfile)
参数:

conanfile< ConanFile 对象 > 当前 recipe 对象。始终使用 self

force_pic

用于添加 –force_pic=True 的布尔值。取决于 self.options.shared 和 self.options.fPIC 值

dynamic_mode

用于添加 –dynamic_mode=[“fully”|”off”] 的字符串。取决于 self.options.shared 值。

cppstd

用于添加 –cppstd=[FLAG] 的字符串。取决于您的设置。

copt

用于添加 –copt=flag1 … –copt=flagN 的标志列表

conlyopt

用于添加 –conlyopt=flag1 … –conlyopt=flagN 的标志列表

cxxopt

用于添加 –cxxopt=flag1 … –cxxopt=flagN 的标志列表

linkopt

用于添加 –linkopt=flag1 … –linkopt=flagN 的标志列表

compilation_mode

用于添加 –compilation_mode=[“opt”|”dbg”] 的字符串。取决于 self.settings.build_type

compiler

用于添加 –compiler=xxxx 的字符串。

cpu

用于添加 –cpu=xxxxx 的字符串。目前,仅在交叉编译时添加。

crosstool_top

用于添加 –crosstool_top 的字符串。

generate()

创建一个包含一些 bazel-build 配置的 conan_bzl.rc 文件。最后提到的配置被设置为 conan-config

conf

BazelToolchain 受以下 [conf] 变量影响

  • tools.build:cxxflags 额外的 C++ 标志列表,将由 cxxopt 使用。

  • tools.build:cflags 额外的纯 C 标志列表,将由 conlyopt 使用。

  • tools.build:sharedlinkflags 额外的链接器标志列表,将由 linkopt 使用。

  • tools.build:exelinkflags 额外的链接器标志列表,将由 linkopt 使用。

  • tools.build:linker_scripts 链接器脚本列表,每个脚本将以 -T 为前缀并添加到 linkopt