我有一个生成C / C ++代码的代码生成器工具。此代码生成器工具使用crosstool1编译。生成的C / C ++代码需要使用crosstool2进行编译。
所以行动是:
- 使用Crosstool1编译'code_generator'。
- 执行'code_generator'并生成'generated_code.cpp'
- 使用Crosstool2编译'generated_code.cpp'
是否可以让cc_library()确定要使用的crosstool?我看到Skylark规则现在允许使用“工具链”参数,我不确定如何使用它,我也不想用Skylark对C / C ++进行繁重的编译。
除了Tenserflow示例之外,是否有使用正确的Host Crosstool和Target Crosstool的示例?每次看书都会让我头疼:D
答案 0 :(得分:1)
假设//crosstool1:toolchain
是描述第一个crosstool的cc_toolchain_suite规则的标签,//crosstool2:toolchain
是第二个crosstool的cc_toolchain_suite标签,项目的构建文件是:
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构建生成。默认情况下,Genrules使用主机配置,所以一切都应该正常工作。