CMake set_target_properties和系统包含目录

时间:2013-10-03 12:45:26

标签: cmake build-automation include-path

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

但是出于各种原因,我不得不通过设置目标的INCLUDE_DIRECTORIES属性,使用set_target_properties为同一范围内的不同目标指定不同的包含路径。

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

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

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分: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