cmake 是否有方法为FetchContent目标获取-isystem?

7ivaypg9  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(156)

NO_SYSTEM_FROM_IMPORTED告诉我们,IMPORTED目标会自动获得-isystem。这是否也适用于通过FetchContent引入项目的目标?
如果没有(我认为是因为在获取的目标上出现了整齐的警告),那么为这样的目标获取-isystem的最佳方法是什么?

nx7onnlm

nx7onnlm1#

这其实很简单(@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}")
dsekswqp

dsekswqp2#

如果您使用的是CMake 3.25cmake_minimum_required(VERSION 3.25)),则可以使用FetchContent_DeclareSYSTEM参数,该参数是在merge request #7399 by contributor daquexian中添加的。
对于CPM的用户,我已经给CPM作者一个关于这个变化here的提示。
还有新的SYSTEM target property,它是在merge request #7308 (also by daquexian)中添加的。如果SYSTEMON,则INTERFACE_INCLUDE_DIRECTORIES将被视为系统包含目录。

相关问题