Cmake:检查系统包含目录是否存在

3

使用cmake 2.6(如果此版本不支持,则使用更高版本)是否可能检查包含目录是否标记为SYSTEM(例如,使用isystem gcc 标志进行编译,请参见2.8 System Headers)?

例如,可以使用以下命令获取当前目标的包含目录:

GET_PROPERTY(_target_include_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)

我该如何知道哪些被标记为 isystem
谢谢。
1个回答

1

查看CMake源代码,使用include_directories添加的包含目录是否标记为SYSTEM似乎在CMake内部进行跟踪,并且无法在CMakeLists.txt¹中使用。

然而,对于目标属性INTERFACE_INCLUDE_DIRECTORIES(由target_include_directories使用PUBLICINTERFACE填充),还有另一个名为INTERFACE_SYSTEM_INCLUDE_DIRECTORIES的目标属性:

add_library(testlib test.cc)

target_include_directories(testlib SYSTEM INTERFACE /target_system)

get_property(_system_include_dirs TARGET testlib PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES)
message("System: ${_system_include_dirs}")

所以也许你可以使用那个代替。
¹ 有提到通过生成器表达式可用的 SYSTEM_INCLUDE_DIRECTORIES 属性,但我无法让其工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接