禁止CMake中来自外部库的编译器警告



我正在尝试构建以下项目https://github.com/whoshuu/cpr#cmake按照他们对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关键字,如下所示:如何从库头中抑制GCC警告?因此代码看起来如下:

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

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

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

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

这取决于编译器。如果您使用clang,只需替换";GCC";通过";叮当";。在Visual Studio上,使用pragma警告。。。这可以通过宏进行移植,看看这篇文章。

最新更新