制作修改由 cc_binary 生成的可执行文件的 Bazel genrule
Making a Bazel genrule that modifies an executable generated by cc_binary
假设我有这样的 cc_binary() 规则:
cc_binary(
name = "App",
srcs = [
"app.cpp",
],
)
这将在 bazel-bin 的某处生成 App.exe。我需要编写一个可以读取 App.exe 并生成它的另一个版本的规则。我该怎么做?
编辑:这是我目前对 genrule 的尝试,但它强制使用不同的配置重新编译 :hello_main,我最终得到类似“error C2955: 'std::pair': use class 个模板需要模板参数列表
genrule(
name = "tbds",
srcs = [
":data",
],
outs = ["tbds.exe"],
exec_tools = ["@libpackfiles//FilePacker"],
tools = [":hello_main"],
cmd = "cp $(location :hello_main) $(OUTS) && $(location @libpackfiles//FilePacker) $(OUTS) -files $(SRCS) -append",
executable = true,
)
cc_binary(
name = "hello_main",
srcs = ["hello_main.cc"],
deps = [
":hello",
],
)
genrule(
name = "foo",
outs = ["out.txt"],
cmd = "du -sh $(location :hello_main)` > $@",
tools = [":hello_main"],
visibility = ["//visibility:public"],
)
将创建一个 out.txt
文件,其中包含 du -sh
命令的输出。您可以将另一个工具添加到 tools
属性到 运行 二进制文件
上的一些转换脚本
假设我有这样的 cc_binary() 规则:
cc_binary(
name = "App",
srcs = [
"app.cpp",
],
)
这将在 bazel-bin 的某处生成 App.exe。我需要编写一个可以读取 App.exe 并生成它的另一个版本的规则。我该怎么做?
编辑:这是我目前对 genrule 的尝试,但它强制使用不同的配置重新编译 :hello_main,我最终得到类似“error C2955: 'std::pair': use class 个模板需要模板参数列表
genrule(
name = "tbds",
srcs = [
":data",
],
outs = ["tbds.exe"],
exec_tools = ["@libpackfiles//FilePacker"],
tools = [":hello_main"],
cmd = "cp $(location :hello_main) $(OUTS) && $(location @libpackfiles//FilePacker) $(OUTS) -files $(SRCS) -append",
executable = true,
)
cc_binary(
name = "hello_main",
srcs = ["hello_main.cc"],
deps = [
":hello",
],
)
genrule(
name = "foo",
outs = ["out.txt"],
cmd = "du -sh $(location :hello_main)` > $@",
tools = [":hello_main"],
visibility = ["//visibility:public"],
)
将创建一个 out.txt
文件,其中包含 du -sh
命令的输出。您可以将另一个工具添加到 tools
属性到 运行 二进制文件