Flo*_*old 5 cmake include clang-tidy
NO_SYSTEM_FROM_IMPORTED告诉我们IMPORTED目标会自动获取-isystem. 这也适用于使用FetchContent引入项目的目标吗?
如果不是(我认为是因为在获取的目标上出现了 clang-tidy 警告问题),那么获得-isystem此类目标的最佳方法是什么?
NO_SYSTEM_FROM_IMPORTED告诉我们IMPORTED目标会自动获取-isystem. 这也适用于使用FetchContent引入项目的目标吗?
不,因为添加的目标FetchContent本质上是添加的:它们成为在生成的 buildystem 中构建(而不仅仅是importadd_subdirectory )的目标。
如果不是(我认为是由于在获取的目标上出现 clang-tidy 警告问题),为此类目标获取 -isystem 的最佳方法是什么?
如果您使用的是CMake 3.25 ( cmake_minimum_required(VERSION 3.25)),则可以使用SYSTEM的参数,该参数是由贡献者 daquexian 在合并请求 #7399FetchContent_Declare中添加的。
对于 CPM 用户,我已在此处向 CPM 作者发出有关此更改的提示。
还有新的SYSTEM目标属性,它是在合并请求#7308(也是由daquexian)中添加的。如果SYSTEM是ON,则将INTERFACE_INCLUDE_DIRECTORIES被视为系统包含目录。
如果您的cmake_minimum_required(VERSION ...)版本低于 v3.25,则使用其他答案。
这实际上非常简单(感谢@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}")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1344 次 |
| 最近记录: |