制作修改由 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 属性到 运行 二进制文件

上的一些转换脚本