如何关闭特定头文件的 -Werror

How to turn off -Werror for a specific header file

提问人:Stéphane 提问时间:4/10/2023 最后编辑:Stéphane 更新时间:4/10/2023 访问量:171

问:

我的项目用于将 GCC 11.3.0 g++ 警告转换为错误并停止构建。但是我们需要包含的第三方头文件会导致编译器发出一堆警告。-Werror

我希望有一种方法可以关闭 1 包含文件。也许我可以在调用该头文件之前和之后发出?-Werror#pragma

然而,情况似乎并非如此。我能找到的最好的方法是禁用单个警告,这将使我列出此头文件引起的所有警告。#pragma GCC diagnostic ...

真的是这样还是我错过了一些明显的东西?


编辑:

事实证明,有些警告/错误可以禁用,但其他警告/错误不能。例如,这适用于删除已签名/未签名的警告:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsign-compare"
#include <problematic_include.hpp>
#pragma GCC diagnostic pop

但这行不通:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
#include <problematic_include.hpp>
#pragma GCC diagnostic pop

...以删除有关 的错误。error: ignoring ‘#pragma _CVUI_COMPILE_MESSAGE ’ [-Werror=unknown-pragmas]

C Linux 编译器错误 G++ 警告

评论

0赞 Artyer 4/13/2023
另请参阅:stackoverflow.com/q/1867065/5754656(在 CMake 或其他方式中使用,而不是include_directories(SYSTEM "/path/to/cvui")-isystem-I)

答:

1赞 Stéphane 4/10/2023 #1

我试图不说出导致这种情况的第三方库,但事实证明,在这种情况下,库本身提供了解决问题的方法。

该库是 CVUI,它提供了一些基于 OpenCV 的简单 GUI 功能。它是一个仅标头的库。事实证明,它有一个调用的宏,可以防止导致 g++ 停止编译的问题行。CVUI_DISABLE_COMPILATION_NOTICES#pragma

最后,尽管这很丑陋,但这是我选择的解决方案:

#define CVUI_IMPLEMENTATION
#define CVUI_DISABLE_COMPILATION_NOTICES
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsign-compare"
#include "cvui.h"
#pragma GCC diagnostic pop

这样,就可以从使用 .cvui.h-Wall -Wextra -Werror

评论

0赞 bolov 4/10/2023
你可以创建一个包含这个丑陋的样板,在你的项目中,你可以包含这个标题,而不是在你包含的任何地方做所有这些cvui_wnoerror.hcvui.h