【发布时间】:2016-07-19 11:47:24
【问题描述】:
我们使用带有 -Wall -Werror 选项的 gcc 构建我们的项目。 来自外部标头的警告被编译指示抑制,如下所示:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#include <somelib/component/settings.h>
#pragma GCC diagnostic pop
在将外部组件升级到新版本后,我们收到了新的警告类型来抑制:
error: inline function ‘...’ given attribute noinline [-Werror]
或不带 -Werror 的警告:
warning: inline function ‘...’ given attribute noinline [enabled by default]
似乎没有办法通过#pragma GCC diagnostic ignored 忽略它。
在这种情况下,在以下情况下可以做什么?
- 无法修改外部标头。在构建时修补本地副本是最后的手段。
- 有问题的标头被广泛使用。
-
-Werror为我们的代码开启
【问题讨论】:
-
打补丁并提交变更请求和测试补丁给上游作者。
-
修补是仅针对开源依赖项的可行解决方案。专有的外部库是不可能的。最后,我们选择在构建时使用 cmake
execute_process(COMMAND "patch" "-N" ...)打补丁
标签: c++ gcc suppress-warnings