如何消除 GCC 中的外部库/第三方警告 [重复]
Posted
技术标签:
【中文标题】如何消除 GCC 中的外部库/第三方警告 [重复]【英文标题】:How to eliminate external lib/third party warnings in GCC [duplicate] 【发布时间】:2011-03-19 12:31:15 【问题描述】:在我正在开发的软件项目中,我们使用了某些 3rd 方库,遗憾的是,它们会产生烦人的 gcc 警告。 我们正在努力清理所有警告代码,并希望在 GCC 中启用将警告视为错误 (-Werror) 标志。 有没有办法让这些我们无法修复的第 3 方生成的警告消失?
【问题讨论】:
格雷格 - 谢谢,会的。山姆-g++ 4.1.2 【参考方案1】:使用 -isystem
示例:
gcc -I./src/ -isystem /usr/include/boost/ -c file.c -o obj/file.o
使用 -isystem 没有关于 boost 的警告:D
【讨论】:
这是一个比创建包装器更好的解决方案。【参考方案2】:如果您使用的是 CMake,您可以通过将 SYSTEM
添加到 include_directories
来实现:
include_directories(SYSTEM "$LIB_DIR/Include")
^^^^^^
【讨论】:
我在 GCC 下测试过,效果很好,但在 MSVC 下没有任何作用。这并不意外,因为 MSVC 似乎没有任何方式指定系统头目录(即 GCC 的 -isystem),但如果您需要 MSVC 支持,请记住一些事情。 在 Xcode/Clang 上似乎也没有为我做任何事情。 @Kevin:关于this blog post,微软似乎终于解决了这个问题。您现在可以在包含之前指定/external:I
。使用 CMake,您可以 SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "/external:I ")
获取 MSVC > VS 15.6。您可能还需要将/experimental:external
添加到CMAKE_CXX_FLAGS
。但是,对于早期的 VS 版本,您必须使用 pragma。【参考方案3】:
我想您是在谈论来自 3rd 方库标头的警告。
GCC 特定的解决方案是创建另一个包装头文件,它基本上包含两行:
#pragma GCC system_header
#include "real_3rd_party_header.h"
并使用包装器而不是原始的 3rd 方标头。
检查another SO response 详细说明编译指示。它本质上告诉 GCC 这(带有递归包含的文件)是一个系统头文件,不应生成任何警告消息。
否则,我不知道如何禁用来自第 3 方代码的警告。当然,除了蛮力:在构建系统中配置要构建的文件,并关闭警告。
【讨论】:
【参考方案4】:http://www.artima.com/cppsource/codestandards.html
示例 1:第三方头文件。 一个你不能的库头文件 change 可能包含一个结构 导致(可能是良性的)警告。 然后用你自己的包装文件 #include 原始版本 标头并有选择地关闭 仅针对该范围的嘈杂警告, 然后#include 你的包装器 贯穿您项目的其余部分。
【讨论】:
以上是关于如何消除 GCC 中的外部库/第三方警告 [重复]的主要内容,如果未能解决你的问题,请参考以下文章