如何在不对开发人员发出 CMake 警告的情况下获取内容(使用 -Wno-dev)?

问题描述 投票:0回答:2

我正在尝试使用

zmq
FetchContent
添加为第三方库。 然而,我对针对开发人员的警告不感兴趣。 由于我已将标签用于经过验证的版本,因此理想情况下它应该可以正常工作,没有任何错误或警告。

我不想为我的整个 CMake 项目配置使用

-Wno-dev
- 仅适用于我的第 3 方库。 我还没有找到在
CMakeLists.txt
内执行此操作的方法。

我的

FetchContent
代码是:

FetchContent_Declare(
  libzmq
  GIT_REPOSITORY https://github.com/zeromq/libzmq.git
  GIT_TAG        v4.3.4
  OVERRIDE_FIND_PACKAGE
)

FetchContent_MakeAvailable(libzmq)

我也没有找到自 v4.2.2 以来没有警告的版本 我已经用

BUILD_COMMAND
CONFIGURE_COMMAND
进行了测试,但通过阅读
CMake
FetchContent

的文档没有找到解决方案

请注意,这个问题是关于 CMake 配置警告的,而不是关于构建警告的。如果您想禁用所获取项目的构建警告,请参阅有没有办法为 FetchContent 目标获取 -isystem?

c++ cmake zeromq cmakelists-options fetchcontent
2个回答
1
投票

我认为你可能不走运。来自 FetchContent 文档:

<contentOptions>
可以是
ExternalProject_Add()
命令理解的任何下载、更新或补丁选项。

请注意配置和构建选项不在该列表中(例如

CMAKE_ARGS
CONFIGURE_COMMAND
)。

我查看了 CMake 变量列表,查找带有“dev”和“warn”的变量(通常在寻找此类事物的目录范围覆盖时,这就是您应该做的),但没有找到您想要的内容寻找。有

CMAKE_WARN_DEPRECATED
,但那不一样(这是针对
-Wno-deprecated
/
-Wdeprecated
标志)。


-1
投票

注意: 这里最初的问题是(显然?)关于 CMake 配置警告。但是,如果您试图抑制通过 FetchContent 导入的第三方库的构建警告,则以下解决方案有效:

我在 Jakub Zakrzewski 的 CMake Discourse 上找到了一个解决方案

https://discourse.cmake.org/t/disable-warning-on-fetched-projects/1978/2

基本上基于每个目标,您获取目标包含目录的属性,然后将这些包含目录标记为“SYSTEM”,这通常会导致编译器抑制警告。在下面的示例中,对于目标

sqlite_orm
:

get_target_property(sqlite_orm_include_dirs sqlite_orm INTERFACE_INCLUDE_DIRECTORIES)
set_target_properties(sqlite_orm PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${sqlite_orm_include_dirs}")

您必须为每个目标手动执行一次此操作。

© www.soinside.com 2019 - 2024. All rights reserved.