如何指定 bazel cc_binary 规则生成的预期文件扩展名?

How can I specify the expected file extension generated by bazel cc_binary rule?

默认情况下,bazel 的 cc_binary 规则会在 Linux 上生成一个没有任何扩展名的输出文件。

我的编译器生成一个 .s19 文件扩展名作为输出(我已经扩展了工具链)。

有没有办法指定输出文件的扩展名? 尽管生成了预期的输出文件 'App-name.s19',但我收到“链接 'App-name' 失败:并非所有输出都已创建或有效”。

我的第二个问题是: 除了 'App-name.s19' 文件之外,我的编译器还会生成一个 'App-name.map' 文件。有没有办法告诉 bazel 验证 'App-name.s19' 和 'App-name.map' 文件。即验证 cc_binary.

生成的多个输出

问题 1)

配置工具链时,您可以加载:artifact_name_pattern from @bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl 并设置 artifact_name_patterns [=28] 的属性=]():

artifact_name_patterns = [
artifact_name_pattern(
    category_name = "executable",
    prefix = "",
    extension = ".s19",
),]

问题 2)

好像cc_binary还不支持地图文件https://github.com/bazelbuild/bazel/issues/6718

一种可能的解决方法是在 BUILD 文件中使用 genrule 来编译代码并生成映射文件,

genrule(
    name = "map",
    srcs = ["hello-world.cc"],
    outs = ["hello-world.exe","output.map"],
    output_to_bindir = 1,
    cmd= "/usr/bin/x86_64-w64-mingw32-gcc -o $(location hello-world.exe) $(location hello-world.cc) -Wl,-Map=\"$(location output.map)\" -lstdc++",
) 

或者 https://groups.google.com/g/bazel-discuss/c/A00d7Ui1f8s/m/vybgGEPIBwAJ