我很好奇是否有一个选项可以禁用关于参数对正在编译的语言无效的gcc警告。
例如:
cc1: warning: command line option "-Wno-deprecated" is valid for C++/Java/ObjC++ but not for C
我们的构建系统传递了我们在整个构建中全局决定的警告。 我们有C / C ++代码,并且在尝试查找实际警告时,警告会变得非常烦人。
有什么建议吗?
答案 0 :(得分:3)
在gcc -Wxxxx 中启用特定警告,并使用 -Wno-xxxx 禁用它们。
您可以通过选项
-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。本手册仅列出两种形式中的一种,不是默认值。
然而@Neil对于分离不同语言的选项是正确的。如果你使用make,你可以例如将所有C选项放入CFLAGS,将所有C ++选项放入CCFLAGS。
答案 1 :(得分:2)
在我看来,如果有这样的选择,就必须有另一个选项来关闭关于该选项的警告,等等无限。所以我怀疑没有。
对于完全不同的语言的构建具有相同的选项似乎有点奇怪 - 我将不同的选项定义为makefile宏并适当地用于不同的目标。
答案 2 :(得分:2)
如果设置CFLAGS变量,它只会影响C文件,如果设置CXXFLAGS变量,它只会影响C ++文件,因此您可以轻松地分离逻辑。
答案 3 :(得分:0)
Alas gcc无法打开或关闭个别警告。某些警告是特殊的,可以设置警告级别,但无法关闭您不关心的警告。
我的意思是谁会关心在文件末尾丢失空行?我知道有一个补丁可以关闭它,但是从源代码构建我的编译器有点太多了。
对于您的构建系统,您可能希望为不同的语言定义单独的警告集。如果你需要使用其他编译器,而不是gcc会发生什么?
答案 4 :(得分:0)
如果您可以选择将C文件编译为C ++,-x c++
。