【问题标题】:Disable all but few warnings in gcc在 gcc 中禁用除少数警告之外的所有警告
【发布时间】:2012-04-06 09:40:42
【问题描述】:

在 gcc 中 -w 用于禁用所有警告。但是在这种情况下,我无法启用特定的(例如 -Wreturn-type)。

是否可以禁用所有警告,但启用少数特定警告?

作为一种解决方法,有没有办法一次生成所有 -Wno-xxx 的列表?它会有帮助吗?我不想手动执行此操作只是为了发现它不等于 -w。

【问题讨论】:

  • 这很奇怪。您通常应该启用所有警告并禁用特定警告...
  • 是的,你是对的,你更清楚!但是让我们想象一下,我有一个包含 400 万行代码的遗留项目,我想在其中查找特定错误。
  • 好吧,如果你只指定-Wreturn-type(没有其他与警告相关的标志),那不是你想要的吗?
  • 不,默认启用警告。

标签: gcc


【解决方案1】:

您可以使用以下命令获取适合直接注入您的MakefileWARN_OPTS 变量:

gcc --help=warnings | awk '
    BEGIN       { print "WARN_OPTS = \\" }
    /-W[^ ]/    { print $1" \\"}
' | sed 's/^-W/    -Wno-/' >makefile.inject

这会给你输出(makefile.inject),比如:

WARN_OPTS = \
   -Wno- \
   -Wno-abi \
   -Wno-address \
   -Wno-aggregate-return \
   -Wno-aliasing \
   -Wno-align-commons \
   -Wno-all \
   -Wno-ampersand \
   -Wno-array-bounds \
   -Wno-array-temporaries \
    : : :
   -Wno-variadic-macros \
   -Wno-vector-operation-performance \
   -Wno-vla \
   -Wno-volatile-register-var \
   -Wno-write-strings \
   -Wno-zero-as-null-pointer-constant \

将其放入您的实际Makefile 后,只需将$(WARN_OPTS) 用作gcc 命令的一部分即可。

它可能需要少量的润色:

  • 去掉-Wno-等无效选项;
  • 修复某些-Wno-<key>=<value> 类型;和
  • 删除最后的\ 字符。

但与生成长列表相比,这只是最小的努力,您现在可以很简单地做到这一点。

当您确定您需要这些警告之一时,只需从 -Wno-<something> 切换回 -W<something>

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 2017-10-11
    • 2015-11-10
    • 2018-03-06
    • 2010-11-07
    • 2022-12-12
    • 1970-01-01
    相关资源
    最近更新 更多