Bazel默认添加-MD-MF-frandom种子标志-为什么?

Bazel默认添加-MD-MF-frandom种子标志-为什么?,bazel,toolchain,Bazel,Toolchain,我有一个专用c编译器的cc_工具链配置,我使用“-s”标志确保bazel输出的编译命令是正确的 但是,除了我指定的之外,bazel还添加了三个编译标志“-MD-MF和-frandom seed” 我的编译器无法识别-MD和-MF标志。“疯狂种子”没有问题 如何指定bazel不添加这些标志?要不添加随机种子,请禁用相应功能,添加: random_seed_feature = feature( name = "random_seed", enabled = Fal

我有一个专用c编译器的cc_工具链配置,我使用“-s”标志确保bazel输出的编译命令是正确的

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

我的编译器无法识别-MD和-MF标志。“疯狂种子”没有问题


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

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

random_seed_feature = feature(
    name = "random_seed",
    enabled = False,
)
并将
random\u seed\u feature
添加到传递给
cc\u common的
features
列表中。创建工具链配置信息()

对于
-MD-MF
,它变得更加复杂。您可以以类似的方式禁用<代码>依赖项文件>代码>,但是 > HDRSXCHECK/<代码>将不期望找到依赖性转储,并且我不相信您可以根据当前实现(或者没有现成的方法)来禁止用CcCooSo链对C++动作进行处理。 问题是,您的编译器是否仍然支持转储依赖项,只是使用不同的标志?然后,您可以(甚至应该)重新定义该功能,以供当前类似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_工具链,其自身的操作不包含标题检查。

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

random_seed_feature = feature(
    name = "random_seed",
    enabled = False,
)
并将
random\u seed\u feature
添加到传递给
cc\u common的
features
列表中。创建工具链配置信息()

对于
-MD-MF
,它变得更加复杂。您可以以类似的方式禁用<代码>依赖项文件>代码>,但是 > HDRSXCHECK/<代码>将不期望找到依赖性转储,并且我不相信您可以根据当前实现(或者没有现成的方法)来禁止用CcCooSo链对C++动作进行处理。 问题是,您的编译器是否仍然支持转储依赖项,只是使用不同的标志?然后,您可以(甚至应该)重新定义该功能,以供当前类似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_工具链,该工具链具有自己的操作,不包含标题检查