在每个目录的基础上抑制GCC警告

时间:2014-08-29 11:13:33

标签: gcc g++ compiler-warnings gcc-warning

我正在处理一个C / C ++代码库,其中包含一些产生大量GCC警告的第三方源,我想隐藏这些警告。第3方代码无法修改或编译到库中(由于构建系统的缺点)。该项目正在编译-Werror

如何让GCC忽略部分代码库中的所有警告(包含在子目录中),或者至少使这些警告不致命?

我知道标志-isystem,但它对我不起作用,因为:

  • 它不会禁止源文件中的警告,仅限于标题。
  • 强制C链接,因此不能与C ++标题一起使用。

GCC版本为4.7或4.8,版本为make供电。

1 个答案:

答案 0 :(得分:1)

GCC无法直接帮助解决这个问题。正确的解决方法是调整构建系统(也许是递归make)。

但是,你可以编写一个扫描参数的小包装脚本,如果找到正确的模式则剥离-Werror

E.g。

#!/bin/bash

newargs=()
werror=true
for arg; do
   case "$arg" in
   *directory-name-i-care-about* )
       newargs=("${newargs[@]}" "$arg")
       werror=false
       ;;
   -Werror )
       ;;
   * )
       newargs=("${newargs[@]}" "$arg")
       ;;
   esac
done

if $werror; then
   newargs=("${newargs[@]}" "-Werror")
fi

exec gcc "${newargs[@]}"

然后,使用CC=my-wrapper-script.sh运行您的构建,您就完成了。您可以调用脚本gcc并将其放在路径上而不是真正的gcc,但要小心选择正确的" gcc"在剧本的最后。

(我实际上没有测试过那个脚本,所以它可能是错误的。)