CMake set_target_properties和系统包含目录

1 build-automation cmake include-path

使用CMake include_directories命令时,可以指定给定目录是否为系统包含目录.

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

但问题是,我无法弄清楚如何告诉CMake目录是一个系统目录,所以它使用-isystem而不是-I在可能的情况下使用.主要是因为该属性只是一个目录路径列表,并没有任何标志.

我以为可能会有SYSTEM_INCLUDE_DIRECTORIES,但我找不到任何提及.

有关如何去做的任何想法?

sak*_*kra 9

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

include_directories(SYSTEM "/foo/bar")
Run Code Online (Sandbox Code Playgroud)

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

set_target_properties(main PROPERTIES APPEND_STRING PROPERTY 
    COMPILE_FLAGS " ${CMAKE_INCLUDE_SYSTEM_FLAG_CXX} /foo/bar")
Run Code Online (Sandbox Code Playgroud)

该变量CMAKE_INCLUDE_SYSTEM_FLAG_CXX通常解析为-isystemUNIX系统.


ste*_*ire 5

在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