我正在尝试构建以下项目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++-17
g++-11
和Ninja。
我能找到的唯一方法是在代码中使用编译器杂注禁用警告:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weverything"
#include <cpr/cpr.h>
#pragma GCC diagnostic pop
这取决于编译器。如果您使用clang,只需替换";GCC";通过";叮当";。在Visual Studio上,使用pragma警告。。。这可以通过宏进行移植,看看这篇文章。