我有一个代码生成器工具,可以生成C/C++代码。此代码生成器工具是用crosstool1编译的。生成的C/C++代码需要用crosstool2编译。
因此,行动是:
是否可以让cc_library()确定要使用的交叉台呢?我看到Skylark规则现在允许一个“工具链”参数,我不确定它是如何使用的,我也不想做C/C++用Skylark编译裸骨的繁重工作。
除了Tenserflow示例之外,是否有使用适当的主机库和目标库的示例?每当我读到它,我都会头痛。
发布于 2017-07-06 07:56:13
假设//crosstool1:toolchain是描述第一个交叉台的cc_toolchain_suite规则的标签,//crosstool2:toolchain是第二个交叉台的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构建:生成器,使用crosstool2生成生成。默认情况下,Genrules使用主机配置,所以所有这些都应该正常工作。
https://stackoverflow.com/questions/44942317
复制相似问题