【发布时间】:2025-12-14 10:30:01
【问题描述】:
我正在尝试按照下面复制的 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。
【问题讨论】:
-
这对于 linux 和跨平台项目来说将是一个很棒的功能。 Visual Studio 16.10 最近通过一个可选设置添加了这个,包括带有尖括号的外部库:
#include <cpr>。 -
“来自 building
cpr库的警告正在阻止项目构建” - 因此,只有在编译cpr库本身时才会收到警告,而不是在包含它的标题?与FetchContent集成的库使用那些编译器标志,这些标志是在调用FetchContent_MakeAvailable时在CMAKE_CXX_FLAGS中设置的。确保这些标志不会将库发出的警告视为错误。 -
是的,只有当我尝试编译项目时。您能否详细说明编译器标志?这些标志将根据 cpr 的 CMake 文件设置对吗?
-
@nbadami,重要的问题是警告是在编译
cpr/…something.cpp时出现,还是在编译包含cpr/include中的内容的您自己的.cpp 时出现。每个问题都需要不同的缓解措施。