我想在编译期间将
-Werror
参数传递给 gcc。 问题是我正在编译的代码具有编译指示语句,例如:
#pragma GCC warning "Custom warning message"
我应该能够在命令行中添加像
-Wno-error=pragmas
这样的参数,以保留这些行作为警告。 但是,当我将 gcc --help=warnings
的输出 grep 为 pragma
、user
和 explicit
时,我找不到需要使用的警告开关的名称。 有谁知道如何在启用 #pragma
时排除显式 -Werror
警告的错误?
我还尝试将
#pragma
修改为以下内容,GCC 文档似乎表明也应该完成此操作:
#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wall"
#pragma GCC warning "Custom warning message"
#pragma GCC diagnostic pop
我的GCC版本是11.4.0。
可以从 GCC 文档中推断出您尝试过的事情的原因 不起作用,但我认为您不需要进一步说服,只是想要一个解决方案。
更换:
#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wall"
#pragma GCC warning "Custom warning message"
#pragma GCC diagnostic pop
与:
#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wcpp"
#warning "Custom warning message"
#pragma GCC diagnostic pop
例如:
$ cat main.c
#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wcpp"
#warning "Custom warning message"
#pragma GCC diagnostic pop
int main(void)
{
int x; // unused
return 0;
}
编译如下:
$ gcc -c -Wunused -Werror main.c
main.c:3:2: warning: #warning "Custom warning message" [-Wcpp]
3 | #warning "Custom warning message"
| ^~~~~~~
main.c: In function ‘main’:
main.c:8:13: error: unused variable ‘x’ [-Werror=unused-variable]
8 | int x; // unused
| ^
cc1: all warnings being treated as errors
在存在
-Werror
的情况下,您的自定义警告仍然是警告。那是因为
此类自定义警告由 -Wcpp
启用,它本身默认启用;
它们被 -Werror
升级为错误,但可以再次降级为警告,
在此期间,通过:
#pragma GCC diagnostic warning "-Wcpp"
error: unused variable ‘x’
显示-Werror
在以下时间后恢复生效:
#pragma GCC diagnostic pop
将
-Wunused
警告升级为错误。