如何在 Bazel 中禁用 C/C++ `-Werror` 构建错误? (又名:如何关闭已由“-Wall -Werror”打开的特定警告)

2024-06-18

我在构建时遇到以下错误:

...has undefined behavior [-Werror,-Wundefined-reinterpret-cast]

Bazel 构建从此完全停止clang(llvm编译器)-Wundefined-reinterpret-cast warning https://clang.llvm.org/docs/DiagnosticsReference.html#wundefined-reinterpret-cast被转换为构建错误-Werror.

尽管出现此构建错误,如何强制构建继续并生成二进制可执行文件?

请注意,我的 bazel 构建命令具有以下形式:

time bazel build //my/src/...

答案是使用-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

更多阅读:

  1. 我已经在我的文档中记录了上述很多信息以及更多信息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。阅读此处了解更多信息。
  2. [我仍然需要尝试和测试]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语句只影响那些文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Bazel 中禁用 C/C++ `-Werror` 构建错误? (又名:如何关闭已由“-Wall -Werror”打开的特定警告) 的相关文章

  • ExecuteNonQueryAsync 并在 SQL 事务中提交

    我正在寻求对我创建的一段代码的帮助 我正在尝试在事务中从 C 进行异步 SQL 调用 例如我可能正在更新或删除表中的行 这是我到目前为止所拥有的 但我似乎无法找到有关在事务中执行此操作的太多信息 根据我在这里所拥有的以及到目前为止我所理解的
  • 在 C# 中格式化 Resharper 属性的支持字段

    有没有办法控制 Resharper 放置其支持字段的位置 目前 它试图让他们在班级中名列前茅 我希望他们能去到酒店的正上方 还没有
  • 在 ASP.NET Core 中全局重用变量

    我必须强制这些变量在我想使用的每个变量上重用 这让我很困难 我需要创建一个类来定义这些变量并在整个程序中使用它们 我怎样才能做到这一点 string RootFolderName Uplaod string ProductPictureFo
  • 资源文件中的控制字符 C#

    我想添加Left To Right控制字符在resource resx文件输入Visual Studio 我在互联网上搜索并找到了一个名为在 NET 资源文件中转义序列的另一种方法 http www devx com tips Tip 34
  • Linq Any 始终返回 true

    我已经使用 Linq to Entities 多年 但这是我第一次遇到这个问题 我有Tips and Items表 每个提示可以有很多项目 我的数据库中只有 3 个项目 编辑项目时 我想确保GivenId对于具有相同提示的项目 字段是唯一的
  • 带有成员 (operator[]) 函数的 invoke_result

    如何为成员函数正确调用invoke result 或者专门用于运算符成员函数 我试过std invoke result
  • 安装/编译 pylzma(lzma python 绑定)

    我已经向作者提出了这个问题website http www joachim bauch de projects pylzma comment page 1 comment 5211 但我想我也可以在这里问 我一直在尝试使用以下设置安装 py
  • 减少最大值并保存其索引

    int v 10 2 9 1 3 5 7 1 2 0 0 int maximo 0 int b 0 int i pragma omp parallel for shared v private i reduction max maximo
  • 值类型数组如何存储在 .NET 对象堆中?

    在 NET中 诸如int之类的值类型对象存储在内存中 引用类型对象需要为引用和对象单独分配内存 并且对象存储在 NET对象堆中 而Array是在堆中创建的 那么int 等值类型的数组如何存储在堆中呢 这是否意味着值类型对象可以存储在堆中而无
  • 更改 Json 中属性的键

    这些天我正在尝试制作一个 json 编辑器 与树视图一起使用 我确实更改了值函数 我也可以更改一些键 但我无法在对象中设置键 我可以设置值 SetValue ref JObject main JToken token JToken newV
  • 如何在运行时统一捕捉两个对象?

    这是 3D 模型 我想将另一个像这样的模型连接到顶部的银色连接器 并将另一个模型连接到右侧 所以请帮助我捕捉它 https i stack imgur com qoWwl png我想知道如何在运行时将两个 3D 对象对齐在一起 即 在 玩
  • OpenFileDialog 中的多个文件扩展名

    如何在一组中使用多个文件扩展名OpenFileDialog 我有Filter BMP bmp GIF gif JPG jpg PNG png TIFF tiff 我想创建组 以便 JPG 为 jpg 和 jpeg TIFF 为 tif 和
  • 如何根据条件退出 PostSharp 方面的 OnEntry 方法中的方法

    我希望方面根据如下条件退出方法调用 AttributeUsage AttributeTargets Method public class IgnoreIfInactiveAttribute OnMethodBoundaryAspect p
  • 作为服务运行时,URLDownloadToFile() 将对象写入缓存中

    我有一个软件 可以将图像下载到工作目录中 然后对其进行处理以创建视频 之后 这些文件将被独立脚本删除 问题是它还将文件写入以下目录 该软件作为系统服务运行 C Windows SysWOW64 config systemprofile Ap
  • Web API 2 c# 中的 Google reCaptcha

    我有一个 ASP NET Web API 2 项目 我正在尝试从表单中读取 Google Captcha 我尝试了这段代码 public string Post FoundingRequest model var response Requ
  • Cmake:在自定义目录中查找 protobuf 包

    我有 cmake 3 10 x 并下载了当前的 protobuf 源 3 6 1 使用 cmake 我创建了 bin 目录 PROTOBUF SOURCE DIR bin 在其中成功构建了该库 下一步我想在我的基于 cmake 的项目中使用
  • 我如何在 WPF 中模仿这种行为?

    我对 WPF 和 C 开发相当陌生 我正在制作这个应用程序 我不知道是否有人熟悉 VOIP App Discord 但他们有一个我非常喜欢的特定行为 并且想尝试使用 WPF 创建类似的风格 当您在 Discord 上添加服务器时 单击一个按
  • 如何在迭代时从地图中删除?

    迭代时如何从地图中删除 喜欢 std map
  • 对数据绑定组合框进行排序的最佳方法是什么?

    我对此做了一些研究 似乎对数据绑定组合框进行排序的唯一方法是对数据源本身进行排序 在本例中为数据集中的数据表 如果是这种情况 那么问题就变成对数据表进行排序的最佳方法是什么 组合框绑定在设计器中设置初始化使用 myCombo DataSou
  • 如何用纯色填充位图?

    我需要使用唯一的 RGB 颜色创建 24 位位图 分辨率 100x100 像素 并将生成的图像保存到磁盘 我目前使用的是SetPixel http msdn microsoft com en us library 6c7eyzyb aspx

随机推荐