4

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

是否可以禁用所有警告,但启用一些特定的警告?

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

4

1 回答 1

1

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

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

这为您提供了输出(in 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>.

于 2014-07-03T09:33:45.420 回答