> cat warning.cpp #pragma foobar > cat no_warning.cpp #pragma message "foobar" > g++ -Wall -Wno-foobar -c warning.cpp warning.cpp:1:0: warning: ignoring #pragma foobar [-Wunknown-pragmas] cc1plus: warning: unrecognized command line option "-Wno-foobar" [enabled by default] > g++ -Wall -Wno-foobar -c no_warning.cpp no_warning.cpp:1:17: note: #pragma message: foobar
解决方法
这是设计,解释
here:
When an unrecognized warning option is requested (e.g.,-Wunknown-warning),GCC emits a diagnostic stating that the option is not recognized. However,if the -Wno- form is used,the behavior is slightly different: no diagnostic is produced for -Wno-unknown-warning unless other diagnostics are being produced. This allows the use of new -Wno- options with old compilers,but if something goes wrong,the compiler warns that an unrecognized option is present.
换句话说,假设你有foo.cc,并且GCC-4.9警告某些东西(让我们称之为foobar),但你相信你使用foobar是安全的.
由于您希望将所有警告视为错误(使用-Werror),因此请尽职地将-Wno-foobar添加到Makefile中.
现在有人试图用GCC-4.8构建你的代码.如上所述,这不会产生任何警告,他会成功.
如果这确实产生了警告,那么你将无法使用foobar构造并拥有一个与GCC-4.8和GCC-4.9一起使用的Makefile.