【问题标题】:CMake set_target_properties and system include directoriesCMake set_target_properties 和系统包含目录
【发布时间】:2013-10-10 04:12:43
【问题描述】:

使用 CMake 的include_directories 命令时,有一种方法可以指定给定目录是否为系统包含目录。

但是,由于各种原因,我不得不求助于使用set_target_properties 来为同一范围内的不同目标指定不同的包含路径,方法是设置目标的INCLUDE_DIRECTORIES 属性。

但是,问题是,我不知道如何告诉 CMake 一个目录是系统目录,因此它尽可能使用 -isystem 而不是 -I。主要是因为该属性只是一个目录路径列表,没有任何标志。

我认为可能有SYSTEM_INCLUDE_DIRECTORIES,但我找不到任何提及。

有什么想法可以解决这个问题吗?

【问题讨论】:

    标签: cmake build-automation include-path


    【解决方案1】:

    在 CMake 2.8.12 中,target_include_directories() 命令学习了 SYSTEM 关键字:

    http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1925cffa083b

    默认情况下,CMake 3.0.0(下一个版本)会将依赖 IMPORTED 目标中列出的所有目录视为 SYSTEM。

    http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a63fcbcb9f6c

    【讨论】:

    • Pffff...刚刚检查了我的版本,它是 2.8.11。我想我会手动调整编译标志,呵呵。不过,感谢您的更新,这很有帮助!
    【解决方案2】:

    添加系统目录的正确方法是使用include_directories命令的SYSTEM选项:

    include_directories(SYSTEM "/foo/bar")
    

    如果include_directories不是一个选项,你可以通过直接修改目标的COMPILE_FLAGS属性来指定一个系统包含目录:

    set_target_properties(main PROPERTIES APPEND_STRING PROPERTY 
        COMPILE_FLAGS " ${CMAKE_INCLUDE_SYSTEM_FLAG_CXX} /foo/bar")
    

    变量 CMAKE_INCLUDE_SYSTEM_FLAG_CXX 在 UNIX 系统上通常解析为 -isystem

    【讨论】:

    • 我明白了。这有点难,但我可以忍受。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多