答案是使用-Wno-error=<name>
建立旗帜,正如海湾合作委员会在这里所描述的 https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html(请注意,clang 的选项是根据 gcc 建模的):
-Werror=
将指定的警告变为错误。附加警告说明符;例如-Werror=switch
将警告控制为-Wswitch
陷入错误。该开关采用否定形式,用于否定-Werror
针对特定警告;例如-Wno-error=switch
makes -Wswitch
警告不是错误,即使-Werror
已生效。
每个可控警告的警告消息包括控制警告的选项。然后该选项可以与-Werror=
and -Wno-error=
如上所述。
Source: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html(强调已添加)。
因此,对于这种情况,添加构建选项-Wno-error=undefined-reinterpret-cast
关闭-Werror=undefined-reinterpret-cast
flag.
在 Bazel 中,您可以使用以下命令传递 C/C++ 构建选项--copt="<flag>"
选项(参见here https://docs.bazel.build/versions/master/user-manual.html#flag--copt)(另请参阅--per_file_copt
选项(参见here https://docs.bazel.build/versions/master/command-line-reference.html#flag--per_file_copt and here https://docs.bazel.build/versions/master/user-manual.html#flag--per_file_copt)),在这种情况下,最终命令如下所示:
time bazel build --copt="-Wno-error=undefined-reinterpret-cast" //my/src/...
这有效! Bazel 构建现已运行完成,仅再次将这些问题显示为警告(注意-Werror
现在警告声明中缺少):
...has undefined behavior [-Wundefined-reinterpret-cast]
请注意,如果您需要一次传递多个构建标志,请使用多次调用--copt=
. Ex:
time bazel build --copt="-Wno-error=undefined-reinterpret-cast" \
--copt="-Wno-error=switch" --copt="-ggdb" --copt="-O0" //my/src/...
注意:永远不要在生产代码中对此类潜在严重警告(例如:未定义的行为)执行此操作。对于更良性的警告,如果您确实需要禁用警告,那么这是正确的技术。对于未定义的行为,这应该只是为了学习。请参阅此答案下面的评论:
这会让你继续前进,但要取消有关潜在可疑行为的警告reinterpret_casts
有点让我兴奋。
– 用户4581301
2020 年 9 月 29 日 0:10
它不适用于生产代码。只是为了收集一些size
使用各种技术输出已编译二进制文件的数据。我同意:禁用这个特定的警告对于生产代码来说是一个坏主意。但是,这个答案是一个通用示例,说明该过程如何寻找更良性的警告,为此目的,这个答案正是我所需要的。
——加布里埃尔·斯台普斯
2020 年 9 月 29 日 0:13
更多阅读:
- 我已经在我的文档中记录了上述很多信息以及更多信息eRCAGuy_hello_world https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world标题为以下部分的回购协议“附加 C 和 C++ 构建说明(例如:w/gcc or clang编译器)”,在这里 https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world#additional-c-and-c-build-notes-ex-wgcc-or-clang-compilers。阅读此处了解更多信息。
- [我仍然需要尝试和测试]https://nelkinda.com/blog/suppress-warnings-in-gcc-and-clang/ https://nelkinda.com/blog/suppress-warnings-in-gcc-and-clang/- 参见特别是。 “3.3 通过控制诊断堆栈抑制警告”一节。了解仅针对某些文件或代码部分启用/禁用 GCC 和 Clang 编译器警告和选项。考虑放置必要的
#pragma
头文件上方和下方的语句#include
语句只影响那些文件。