bazel - 如何指定 bazel cc_binary 规则生成的预期文件扩展名?
问题描述
默认情况下,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)
配置工具链时,您可以从 @bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl 加载 artifact_name_pattern 并设置 cc_common.create_cc_toolchain_config_info() 的 artifact_name_patterns 属性:
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
推荐阅读
- java - Jackson:“(尽管至少存在一个 Creator):没有要反序列化的字符串参数构造函数/工厂方法”
- django - Vue JS 前端和 Django 后端
- import - 如何通过清单文件将我的 .qz 文件从 illumina 测序导入 qiime2?
- deep-learning - 如果处理涉及线性变换,则用于数据处理的机器学习
- actions-on-google - 从谷歌操作中获取 JWT 令牌中的用户信息
- java - 需要帮助,原因:org.apache.maven.surefire.booter.SurefireBooterForkException:分叉进程中出现错误
- java - 无法解析 ttf glyf 表
- dart - Intellij Idea Dart SQL 注入
- c++ - 为什么结构化绑定不适用于平凡的派生类?
- postgresql - PostgreSQL - 使用两个标签列和两个 ID 列旋转两次