c/c++:忽略项目代码以外的 warning

很久以前就曾经想让团队在编译的时候都加上 -Werror,无奈一旦碰到项目以外的头文件里有 warning 就很头疼而不得不放弃。

直到今天遇上了一个比较罕见的情况。

同事 F 的代码用到了 protobuf。之前在某台机器上编译的一直没啥问题,今天换了台机器编译就挂了,而且是挂在 protobuf 的头文件里面。查来查去,发现除了 protobuf 之前是装在系统路径下面,现在是装在用户目录空间里之外,别无区别。



可是如果 protobuf 的头文件里真的有 warning,那无论如何都不应该被编译器放过啊。以 google 在业界神一般的存在,难道也会发布出有 warning 的 c++ sdk 么。

资料不多,不过所幸还真有。google 的 protobuf 2.3 还真就是这个德性。有的人自己 patch 了有瑕疵的头文件了事(这种事鄙厂也干过),还有人提到了本文的核心——gcc 的 -isystem 选项。

以前只知道一个 -I。而 -isystem 的作用和 -I 类似,但是会给附带的目录以系统路径待遇。系统路径有啥待遇?而这个待遇,主要就是扔掉各种 warning(标准答案在这里)。

目前看来,有了 -isystem,用 -Werror 培养团队良好的编程习惯应该是没障碍了。

评论