【问题标题】:gcc: suppress [enabled by default] warning from c++ codegcc:抑制来自 C++ 代码的 [默认启用] 警告
【发布时间】: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 忽略它。

在这种情况下,在以下情况下可以做什么?

  1. 无法修改外部标头。在构建时修补本地副本是最后的手段。
  2. 有问题的标头被广泛使用。
  3. -Werror 为我们的代码开启

【问题讨论】:

  • 打补丁并提交变更请求和测试补丁给上游作者。
  • 修补是仅针对开源依赖项的可行解决方案。专有的外部库是不可能的。最后,我们选择在构建时使用 cmake execute_process(COMMAND "patch" "-N" ...) 打补丁

标签: c++ gcc suppress-warnings


【解决方案1】:

最后我们选择了在构建时打补丁。这有点hacky,但它可以让我们的项目保持完整。

补丁已添加到 cmake 构建中:

execute_process(COMMAND "patch" "-N" "header_to_patch.h" "header_to_patch.h.patch")

补丁文件的准备:

diff -u "original/header_to_patch.h" "fixed/header_to_patch.h" &gt; header_to_patch.h.patch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 2011-02-11
    • 2012-10-02
    • 2017-04-11
    • 1970-01-01
    • 2015-08-01
    • 2019-11-30
    • 1970-01-01
    相关资源
    最近更新 更多