使用不同的交叉工具编译时,Bazel cc_库依赖于其他cc_库

使用不同的交叉工具编译时,Bazel cc_库依赖于其他cc_库,bazel,Bazel,我有一个生成C/C++代码的代码生成器工具。此代码生成器工具是使用crosstool1编译的。生成的C/C++代码需要使用crosstool2进行编译 因此,行动是: 使用Crosstool1编译“代码生成器” 执行“代码生成器”并生成“生成的代码.cpp” 使用Crosstool2编译“生成的_code.cpp” 可以让cc_库()确定要使用的交叉工具吗?我看到Skylark规则现在允许一个“toolchains”参数,我不知道如何使用它,我也不想用Skylark来完成C/C++编译裸骨的

我有一个生成C/C++代码的代码生成器工具。此代码生成器工具是使用crosstool1编译的。生成的C/C++代码需要使用crosstool2进行编译

因此,行动是:

  • 使用Crosstool1编译“代码生成器”
  • 执行“代码生成器”并生成“生成的代码.cpp”
  • 使用Crosstool2编译“生成的_code.cpp”
可以让cc_库()确定要使用的交叉工具吗?我看到Skylark规则现在允许一个“toolchains”参数,我不知道如何使用它,我也不想用Skylark来完成C/C++编译裸骨的繁重工作


除了Tenserflow示例外,是否有使用适当的主机交叉工具和目标交叉工具的示例?每次读到它我都会头疼:D

假设
//crosstool1:toolchain
是描述第一个crosstool的cc_工具链套件规则的标签,
//crosstool2:toolchain
是第二个crosstool的cc_工具链套件的标签,项目的构建文件是:

cc_binary(
    name = "generator",
    srcs = [ "main.cc" ],
)

genrule(
    name = "generate",
    outs = ["generated.cc"],
    cmd = "$(location :generator) > $@",
    tools = [":generator"],
)

cc_binary(
    name = "generated",
    srcs = [ "generated.cc" ],
)
然后运行:

bazel build --host_crosstool_top=//crosstool1:toolchain --crosstool_top=//crosstool2:toolchain :generated
它将完全按照您所描述的那样执行,它将使用crosstool1构建:generator,并使用crosstool2构建generated。Genrules默认使用主机配置,所以所有这些都应该正常工作