提问人:Stéphane 提问时间:4/10/2023 最后编辑:Stéphane 更新时间:4/10/2023 访问量:171
如何关闭特定头文件的 -Werror
How to turn off -Werror for a specific header file
问:
我的项目用于将 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]
答:
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.h
cvui.h
上一个:swig 忽略未知的基类
下一个:引发异常触发的 C4913 警告
评论
include_directories(SYSTEM "/path/to/cvui")
-isystem
-I
)