1

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

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

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

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

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

4

2 回答 2

11

添加系统目录的正确方法是使用命令的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")

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

于 2013-10-03T13:55:20.483 回答
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

于 2013-10-18T22:29:40.777 回答