禁用不兼容选项的gcc警告

我很好奇是否有一个选项可以禁用关于参数对编译语言无效的gcc警告。

例如:

cc1: warning: command line option "-Wno-deprecated" is valid for C++/Java/ObjC++ but not for C 

我们的构建系统传递了我们在整个构建中全局决定的警告。 我们有C / C ++代码,并且在尝试查找实际警告时,警告会变得非常烦人。

有什么建议?

在我看来,如果有这样一个选项,就必须有一个进一步的选择来关闭关于该选项的警告,等等无限。 所以我怀疑没有。

对于完全不同语言的构建具有相同的选项似乎有点奇怪 – 我将不同的选项定义为makefile宏并适当地用于不同的目标。

要在gcc -Wxxxx中启用特定警告,并使用-Wno-xxxx禁用它们。

从GCC警告选项 :

您可以使用以-W', for example -Wimplicit to request warnings on implicit declarations. Each of these specific warning options also has a negative form beginning开头的选项请求许多特定警告-W', for example -Wimplicit to request warnings on implicit declarations. Each of these specific warning options also has a negative form beginning -W', for example -Wimplicit to request warnings on implicit declarations. Each of these specific warning options also has a negative form beginning –Wno-‘以关闭警告; 例如,-Wno-implicit。 本手册仅列出两种forms中的一种,不是默认值。

但是@Neil对于分离不同语言的选项是正确的。 如果使用make,您可以将所有C选项放入CFLAGS,将所有C ++选项放入CCFLAGS。

如果设置CFLAGS变量,它只会影响C文件,如果设置CXXFLAGS变量,它只会影响C ++文件,因此您可以轻松地分离逻辑。

唉gcc无法打开或关闭个别警告。 某些警告是特殊的,可以设置警告级别,但无法关闭您不关心的警告。

我的意思是谁会关心在文件末尾丢失空行? 我知道有一个补丁可以关闭它,但是从源代码构建我的编译器有点太多了。

对于构建系统,您可能希望为不同的语言定义单独的警告集。 如果你需要使用其他编译器,而不是gcc会发生什么?

如果将C文件编译为C ++是一个选项, -x c++