我使用 -Werror
编译我的项目,以确保我的所有代码都没有可识别的警告。但是,我当前的项目有一个第三方依赖项,其中有一个问题会导致警告 - 由于 -Werror
标志,该警告使我的构建失败。
我想使用-Werror
标志,我不想更正第三方包。有没有办法忽略这个警告?
package.h:126:1: error: useless storage class specifier in empty declaration [-Werror]
};
产生错误的代码行是一个带有“悬空”typedef 的结构定义。
typedef struct my_data_obj {
char* data;
uint32_t data_size;
};
这显然是一个错误 - 但我找不到任何 pragma
或任何此类机制来忽略从该头文件生成的警告。有什么想法吗?
编辑:解决方案
尽管我接受了 Florian Weimer 的回答,因为它最接近地回答了问题,但这并不是我所解决的实际问题。我将在下面描述。通过将 header 包含为系统 header ,我做了我想做的事情 - 无需修复包即可抑制错误。
我最后做的是创建一个补丁文件,并在每次构建项目时简单地应用该补丁。
vim package.h
# fix the file
git add package.h
git diff --cached > package.h.patch
# on build time
git apply package.h.patch
最佳答案
我假设您想从要启用 -Werror
的文件中包含 package.h
。
GCC 没有单独的标志来控制这个警告,否则编译器会打印出来。使用单独的标志,您可以使用 #pragma GCC diagnostics ignore
,如其他答案中所示,可能带有包装头文件。
但是,您可以将头文件放在单独的目录中,而不是使用 -I
将其添加到包含路径,而是使用 -isystem
。因此,头文件被视为系统头文件,除非您还使用 -Wsystem-headers
进行编译,否则系统头文件中的警告将被抑制。
关于c - 如何使用 -Werror 忽略 gcc 的 "useless storage class"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46894986/