使用CMake的include_directories
命令时,可以指定给定目录是否为系统包含目录。
但是出于各种原因,我不得不通过设置目标的INCLUDE_DIRECTORIES
属性,使用set_target_properties
为同一范围内的不同目标指定不同的包含路径。
但问题是,我无法弄清楚如何告诉CMake目录是系统目录,因此它尽可能使用-isystem
而不是-I
。主要是因为该属性只是一个目录路径列表,并且没有任何标志。
我以为可能有SYSTEM_INCLUDE_DIRECTORIES
,但我找不到任何提及。
关于如何解决这个问题的任何想法?
答案 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