【问题标题】:How to supress warnings for the includes? [duplicate]如何抑制包含的警告? [复制]
【发布时间】:2017-09-24 08:39:08
【问题描述】:

我有一个使用tinyxml2 库的项目。我有一个很长的编译器选项列表,其中列出了-Werror=zero-as-null-pointer-constant。所以,无论我在哪里包含tinyxml2.h,我都有错误:0 used as null pointer,但是我的代码没有这样的问题。有没有办法禁用包含的某些编译器选项,因为我无法控制它们?

附:如果不可能通过gcc/clang 选项来做,也许可以通过cmake 来做?或者我想知道这两种方式是否存在。

【问题讨论】:

  • GCC 和 Clang 都有 pragmas 来(可能暂时)禁用警告。 The GCC online documentation 可能是一个开始寻找的好地方。
  • ... 如果您不想在所有 your 代码中乱扔杂注,请创建一个仅包含 tinyxml2.h 的标头并包含 that 在您的源代码中。然后,如果需要,您可以在一个地方添加对更多编译器的支持。

标签: c++ cmake


【解决方案1】:

您可以使用抑制编译指示。

GCC 和 VC++ 编译器支持此功能,如下所示:

#pragma warning(push)
#pragma warning(disable : 4244)
#pragma warning(disable : 4127)
#pragma warning(disable : 4512)
#include <boost/python.hpp>
#pragma warning(pop)

以下是详细规格:

【讨论】:

    【解决方案2】:

    您可以将tinyxml2 的包含目录标记为系统包含目录,这将抑制来自那里的警告。

    使用 GCC/Clang,您可以使用 -isystem 而不是 -I,或者在 CMake 中添加包含目录时使用关键字 SYSTEM。

    例如

    include_directories(SYSTEM ${SOME_INCLUDE_DIR})
    

    或者,更好,

    target_include_directories(myExe SYSTEM ${SOME_INCLUDE_DIR}) 
    

    【讨论】:

    • 明确地说,警告被抑制是将目录标记为系统包含目录的效果之一,但不是唯一的。
    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 2019-02-25
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    相关资源
    最近更新 更多