我编写了一个自定义CROSSTOOL文件,该文件调用了我的Cortex-M目标的arm-gcc编译器。我通过-isystem
指定了我的标志,包括sysroot。
我看到Bazel用一堆额外的-I
标志扩充了我对gcc的调用。这似乎没问题,b / c Bazel正在为构建期间生成的文件添加路径等等。
我看到Bazel还添加了-isystem
,我没有指定:
-isystem external/bazel_tools/tools/cpp/gcc3
我无法弄清楚如何让Bazel压制这个,因为通过观察" gcc3" in the code,看起来它试图引入特定的STL。
我可以告诉Bazel不要添加吗?它充其量是无害的,但可能是阴险的。
答案 0 :(得分:1)
首先让我回答一个更普遍的问题:如何强迫Bazel停止修补我的水壶?这可以通过在您的crosstool中定义no_legacy_features
功能来完成,只需将其放入所有相关的toolchain
消息中即可:
feature { name: "no_legacy_features" }
使用该功能,Bazel不会修补您的crosstool,因此它不会添加-isystem
标志。但它也将停止添加所有其他标志,如-D define,-l libs等。您可以在CppActionConfigs中看到bazel添加到您的crosstool的所有内容。另一个问题是我现在每天都会引入新功能和新的构建变量,所以如果你想在将来升级bazel,你肯定需要更新crosstool。如果您不使用action_configs
并且未定义no_legacy_features
,则您的套期工具将继续有效。最终我在crosstool上的工作将完成,crosstool将稳定。现在情况并非如此。
现在第二个问题是为什么bazel在那里添加-isystem
旗帜,我不知道。因此我提交了an issue。