【问题标题】:Cmake: check if system include directoryCmake:检查系统是否包含目录
【发布时间】:2016-08-08 09:37:24
【问题描述】:

是否可以使用 cmake 2.6(或更高版本,如果在此版本中不可能)检查包含目录是否标记为SYSTEM(例如使用isystem gcc 标志编译,请参阅2.8 System Headers)?

例如,我通过以下方式获取当前目标的包含目录:

GET_PROPERTY(_target_include_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)

我如何知道哪些标记为isystem

谢谢

【问题讨论】:

    标签: c++ cmake include


    【解决方案1】:

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

    但是,对于 target 属性 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 属性,但我无法让它工作。

    【讨论】:

      猜你喜欢
      • 2013-10-10
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2014-05-10
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多