我用-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的答案,因为它最接近问题的答案并不是我解决的实际问题。我会描述下面的吼叫。通过将标题包含在系统标题中,我完全按照自己的意愿执行操作 - 无需修复包即可抑制错误。
我最终做的是创建一个补丁文件,并在每次构建项目时简单地应用该补丁。
vim package.h
# fix the file
git add package.h
git diff --cached > package.h.patch
# on build time
git apply package.h.patch
答案 0 :(得分:3)
我假设您要在要启用.Build()
的文件中加入package.h
。
GCC没有单独的标志来控制此警告,否则编译器会打印它。使用单独的标志,您可以使用-Werror
,如其他答案中所示,可能使用包装头文件。
但是,您可以将头文件放入单独的目录中,而不是使用#pragma GCC diagnostics ignore
将其添加到包含路径,而是使用-I
。因此,头文件被视为系统头,除非您还使用-isystem
进行编译,否则系统头中的警告将被禁止。
答案 1 :(得分:-1)
所有警告和错误都有特定的名称,可以在每个警告/错误的基础上启用或禁用。
例如,假设我有一个未使用的变量并启用了有关它的警告,那么我将收到类似于
的消息/some/path/main.cpp:18:9: warning: unused variable ‘i’ [-Wunused-variable]
消息的最后一部分,即方括号内的部分,是特定警告的名称。
使用此名称,您可以使用-Wno-<name of warning>
选项禁用警告。如果出现上述警告,则会-Wno-unused-variable
禁用。
您的用例与小不同,因为您要禁用变为错误的警告。这与上面的内容非常相似,但选项的一般形式是-Wno-error=<name of warning or error>
。在我们的示例中,它是-Wno-error=unused-variable
。
所有这些当然是in the GCC documentation,更具体地说是in the warning options documentation。
所以你需要做的就是找出警告的名称,这样你就可以将它用于-Wno-error=
选项。