bazel - Bazel 默认添加 -MD -MF -frandom-seed 标志 - 为什么?
问题描述
我有一个专有 c 编译器的 cc_toolchain 配置,并且我使用“-s”标志确保编译命令从 bazel 输出中正确。
但是,除了我指定的内容之外,bazel 还添加了三个编译标志“-MD -MF 和 -frandom-seed”。
我的编译器无法识别 -MD 和 -MF 标志。-frandom-seed 没有问题。
如何指定 bazel 不添加这些标志?
解决方案
要不添加随机种子,请禁用相应功能,添加:
random_seed_feature = feature(
name = "random_seed",
enabled = False,
)
并添加到您传递到random_seed_feature
的列表中。features
cc_common.create_cc_toolchain_config_info()
因为-MD -MF
它变得更加复杂。dependency_file
您可以以类似的方式禁用功能,但hdrs_check
期望找到依赖项转储会失败,我不相信您实际上可以根据当前实现使用 cc_toolchain 禁用 C++ 操作(或者想到没有现成的方法)。
问题是,您的编译器是否仍然支持转储依赖项,只是使用不同的标志?然后您可以(甚至应该)重新定义该功能,以供参考https://github.com/bazelbuild/rules_cc目前对于 U*X-like 系统看起来像这样:
dependency_file_feature = feature(
name = "dependency_file",
enabled = True,
flag_sets = [
flag_set(
actions = [
ACTION_NAMES.assemble,
ACTION_NAMES.preprocess_assemble,
ACTION_NAMES.c_compile,
ACTION_NAMES.cpp_compile,
ACTION_NAMES.cpp_module_compile,
ACTION_NAMES.objc_compile,
ACTION_NAMES.objcpp_compile,
ACTION_NAMES.cpp_header_parsing,
ACTION_NAMES.clif_match,
],
flag_groups = [
flag_group(
flags = ["-MD", "-MF", "%{dependency_file}"],
expand_if_available = "dependency_file",
),
],
),
],
)
如果您的编译器根本不生成此文件,恐怕除了禁用您需要包装其调用并将空文件转储到dependency_file
预期位置的功能之外(基本上使用包装器理解的标志,获取文件名并从编译器调用中剥离两者,为检查编写一个空文件)。通过绕过它,您将丢失检查依赖项是否正确声明的标题,但它会允许构建继续进行。
或者,从头开始新的 cc_toolchain 具有自己的不包含标头检查的操作可能是一种选择。
推荐阅读
- docker - Docker Hub:远程构建触发器不起作用
- python - python - 如何从只有两个元素且没有重复的列表中找到所有可能的组合?
- ios - s 为什么我的 Product->Archive 因“非法尝试在不同上下文中的对象之间建立关系 'compressionType'”而失败?
- sql - SQL 错误列计数与第 1 行的值计数不匹配
- c# - 为什么有些但不是所有的 Letsencrypt 网站不能被阅读?
- python - 如何在不和谐中将json与asyncio一起使用?
- python - 如何根据多个键对多维列表进行排序?
- java - 为什么运行 mvn clean install 命令(在 Spring Boot 项目上)如果我注释掉这些方法以跳过测试,我也会获得单元测试失败?
- angular - 如何从具有多个组件的Angular中的一键事件中获得不同的输出?
- powershell - RoboCopy.exe 开关在 Powershell 脚本中不起作用