在 CMake 中抑制来自外部库的编译器警告

时间:2021-06-01 21:53:00

标签: c++ cmake

我正在尝试按照下面复制的 CMake 说明将以下项目 https://github.com/whoshuu/cpr#cmake 构建到我的项目中:

include(FetchContent)
FetchContent_Declare(cpr GIT_REPOSITORY https://github.com/whoshuu/cpr.git GIT_TAG c8d33915dbd88ad6c92b258869b03aba06587ff9) # the commit hash for 1.5.0
FetchContent_MakeAvailable(cpr)

我的项目已经有一些与主要目标相关联的其他库,所以我按如下方式包含了这个新库:

target_link_libraries(my_target PRIVATE cpr::cpr PUBLIC other_libraries)

问题在于构建 cpr 库的警告阻止了项目的构建。我想抑制这些警告。我已尝试按照此处的建议添加 SYSTEM 关键字:How to suppress GCC warnings from library headers?,因此代码如下所示:

target_link_libraries(my_target PRIVATE SYSTEM cpr::cpr PUBLIC other_libraries)

但这没有帮助。是否有其他方法可以在 CMake 中抑制来自外部库的警告?如果有帮助,我正在使用 C++-17 g++-11 和 Ninja。

1 个答案:

答案 0 :(得分:0)

我知道这在技术上不能回答您的问题,但是,我是新来的我无法发表评论。

我能找到的唯一方法是在代码中使用编译器编译指示禁用警告:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weverything"
#include <cpr/cpr.h>
#pragma GCC diagnostic pop

这取决于编译器。如果您使用 clang,只需将“GCC”替换为“clang”。在 Visual Studio 上,使用 pragma 警告...这可以通过宏进行移植,看看 this article