【问题标题】:Disable gcc warning for incompatible options禁用不兼容选项的 gcc 警告
【发布时间】:2009-06-04 21:18:04
【问题描述】:

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

例如:

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

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

有什么建议吗?

【问题讨论】:

  • 恕我直言,这最好在 Make 级别解决。你知道哪些源文件是 C,哪些是 C++,对吧?

标签: c++ c gcc gcc-warning


【解决方案1】:

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

来自GCC Warning Options

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

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

【讨论】:

  • 警告选项正在生成警告,我认为 -Wno* 不适用于这种情况。
【解决方案2】:

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

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

【讨论】:

  • 我意识到这在外人看来很奇怪。我不负责构建系统,我只是想清理它。我真的没有能力将两者分开。
【解决方案3】:

如果你设置CFLAGS变量它只会影响C文件,如果你设置CXXFLAGS变量它只会影响C++文件,所以你可以很容易地分离逻辑。

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

    • 我们的构建系统确实支持多个编译器,实际上是 3 个。跨越 6 种不同的架构。 GCC 编译旧的 C 代码是边缘情况,以及 -> 为什么我问我的问题..
    【解决方案5】:

    如果您可以选择将 C 文件编译为 C++,-x c++

    【讨论】:

    • 这是一个非常糟糕的主意,他们将引入 libstdc+++ 进行链接,这是 huge
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    相关资源
    最近更新 更多