按目录抑制GCC警告

3
我正在处理一个包含一些第三方源代码的C/C++代码库,这些源代码会产生大量的GCC警告,我想隐藏它们。由于构建系统的缺陷,无法修改或将第三方代码编译为库。该项目正在使用-Werror进行编译。
如何请求GCC忽略代码库中一部分(包含在子目录中)的所有警告,或者至少使这些警告不致命?
我知道选项-isystem,但它对我不起作用,因为:
  • 它不能抑制源文件中的警告,只能抑制头文件中的警告。
  • 它强制使用C链接,因此无法与C++头文件一起使用。
GCC版本为4.7或4.8,构建使用make

1
修改Makefile是一个选项吗?因为那里设置了编译器标志... - DevSolar
我可以修改顶层Makefile,但是涉及的代码使用了嵌套的Makefile。 - Pavel Kirienko
你可以修改嵌套的Makefile代码。 - Basile Starynkevitch
1个回答

1
GCC不能直接解决这个问题。正确的修复方法是调整您的构建系统(可能是递归make)。
但是,您可以编写一个小包装脚本来扫描参数,并在找到正确模式时去除-Werror。
例如:
#!/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"。

(我实际上没有测试过该脚本,所以可能有错误。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接