【问题标题】:Bazel adds -MD -MF -frandom-seed flags by default - Why?Bazel 默认添加 -MD -MF -frandom-seed 标志 - 为什么?
【发布时间】:2021-02-26 13:58:21
【问题描述】:

我有一个专有 c 编译器的 cc_toolchain 配置,并且我已使用“-s”标志确保编译命令从 bazel 输出中正确。

但是,除了我指定的内容之外,bazel 还添加了三个编译标志“-MD -MF 和 -frandom-seed”。

我的编译器无法识别 -MD 和 -MF 标志。 -frandom-seed 没有问题。

如何指定 bazel 不添加这些标志?

【问题讨论】:

    标签: bazel toolchain


    【解决方案1】:

    不添加随机种子,禁用相应功能,添加:

    random_seed_feature = feature(
        name = "random_seed",
        enabled = False,
    )
    

    并将random_seed_feature 添加到您传递给cc_common.create_cc_toolchain_config_info()features 列表中。

    对于-MD -MF,它变得更加复杂。您可以以类似的方式禁用dependency_file 功能,但hdrs_check 将无法找到依赖项转储,我不相信您实际上可以基于当前实现(或没有现成的方法)使用 cc_toolchain 禁用 C++ 操作想到了)。

    问题是,您的编译器是否仍然支持转储依赖项,只是使用不同的标志?然后您可以(甚至应该)重新定义该功能,以供参考 https://github.com/bazelbuild/rules_cc 它目前对于 U*X 类系统看起来像这样:

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多