我很好奇是否有一个选项可以禁用关于参数对正在编译的语言无效的 gcc 警告。
前任:
cc1: warning: command line option "-Wno-deprecated" is valid for C++/Java/ObjC++ but not for C
我们的构建系统会在整个构建过程中传递我们在全局范围内决定的警告。我们同时拥有 C/C++ 代码,并且在尝试查找实际警告时,警告会变得非常烦人。
有什么建议么?
我很好奇是否有一个选项可以禁用关于参数对正在编译的语言无效的 gcc 警告。
前任:
cc1: warning: command line option "-Wno-deprecated" is valid for C++/Java/ObjC++ but not for C
我们的构建系统会在整个构建过程中传递我们在全局范围内决定的警告。我们同时拥有 C/C++ 代码,并且在尝试查找实际警告时,警告会变得非常烦人。
有什么建议么?
在 gcc -Wxxxx中启用特定警告并使用-Wno-xxxx禁用它们。
从GCC 警告选项:
您可以使用以 -Wno-' 开头的选项来请求许多特定警告以
-W', for example -Wimplicit to request warnings on implicit declarations. Each of these specific warning options also has a negative form beginning
关闭警告;例如,-Wno-隐式。本手册仅列出了两种形式中的一种,以非默认形式为准。
但是@Neil 对不同语言的分离选项是正确的。如果您使用make,您可以例如将所有C 选项放入CFLAGS 并将所有C++ 选项放入CCFLAGS。
如果设置 CFLAGS 变量只会影响 C 文件,如果设置 CXXFLAGS 变量只会影响 C++ 文件,因此您可以轻松分离逻辑。
在我看来,如果有这样的选项,就必须有一个进一步的选项来关闭关于该选项的警告,以此类推。所以我怀疑没有。
无论如何,为完全不同的语言构建相同的选项似乎有点奇怪 - 我会将不同的选项定义为 makefile 宏并适当地用于不同的目标。
唉 gcc 无法打开或关闭个别警告。有些警告是特殊情况,可以设置警告级别,但无法关闭您不关心的警告。
我的意思是谁会关心文件末尾缺少空行?我知道有一个补丁可以关闭它,但是从源代码构建我的编译器有点太多了。
对于您的构建系统,您可能希望为不同的语言定义单独的警告集。如果您需要使用其他编译器,而不是 gcc,会发生什么?
如果您可以选择将 C 文件编译为 C++ -x c++
,.