有没有办法为 FetchContent 目标获取 -isystem?

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

NO_SYSTEM_FROM_IMPORTED
告诉我们
IMPORTED
目标自动获得
-isystem
。这是否也适用于使用 FetchContent 引入项目的目标?

如果不是(我假设是因为在获取的目标上有 clang-tidy 警告问题),获得此类目标的最佳方法是什么

-isystem

cmake include clang-tidy
2个回答
6
投票

NO_SYSTEM_FROM_IMPORTED
告诉我们
IMPORTED
目标自动获得
-isystem
。这是否也适用于使用 FetchContent 引入项目的目标?

不,因为

FetchContent
添加的目标本质上是由
add_subdirectory
添加的:它们成为生成的 buildystem 中 build(而不仅仅是 import)的目标。

如果不是(我假设是因为在获取的目标上有 clang-tidy 警告的问题),为此类目标获取 -isystem 的最佳方法是什么?

如果您使用的是 CMake 3.25 (

cmake_minimum_required(VERSION 3.25)
),您可以使用
SYSTEM
FetchContent_Declare
参数,它是由贡献者 daquexianmerge request #7399 中添加的。

对于 CPM 的用户,我已向 CPM 作者提请注意此更改here.

还有新的

SYSTEM
目标属性,它是在merge request #7308(也是daquexian)中添加的。如果
SYSTEM
ON
INTERFACE_INCLUDE_DIRECTORIES
将被视为系统包含目录。

如果您的

cmake_minimum_required(VERSION ...)
低于v3.25,那么使用这个其他答案


4
投票

实际上真的很容易(感谢@Tsyvarev):

include (FetchContent)

set (FETCHCONTENT_QUIET FALSE)

FetchContent_Declare (
  Catch2
  GIT_REPOSITORY https://github.com/catchorg/Catch2.git
  GIT_TAG v2.4.2
  GIT_PROGRESS TRUE
)

FetchContent_MakeAvailable (Catch2)

### here is what makes all include directories -isystem
get_target_property(CATCH2_IID Catch2 INTERFACE_INCLUDE_DIRECTORIES)
set_target_properties(Catch2 PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${CATCH2_IID}")
© www.soinside.com 2019 - 2024. All rights reserved.