使用 – 系统而不是 – 我与CMake

在使用gcc构build时,CMake中是否有任何方法强制通过include_directories指定的path(或者可能通过不同的函数)使用-isystem标志而不是-I标志?

有关-I和-isystem的详细信息,请参阅http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options 。

是的,你使用可选的SYSTEM标志来强制一个path成为一个包含系统的path

include_directories(SYSTEM path) 

http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:include_directories

从CMake 2.8.12开始,您可以使用新的target_include_directories将系统目录包括在目标级别,同时利用cmake的新的使用要求function:

 target_include_directories(foo SYSTEM PUBLIC path) 

现在,foo将使用path作为系统包含,并且链接到foo的任何东西也会像系统包含一样自动使用path。 您可以通过将PUBLIC关键字更改为PRIVATE或INTERFACE来控制这些使用要求的传播。

http://cmake.org/cmake/help/v2.8.12/cmake.html#command:target_include_directories

如前所述,包含系统path的正确方法是:

 include_directories(SYSTEM path1 path2)<br> 

但是从CMake 2.8.4和Makefiles开始,这只用于C ++而不是C,我研究过它,GNU.cmake没有初始化: CMAKE_INCLUDE_SYSTEM_FLAG_C

所以你可以在调用project()后自己设置它。

如果(CMAKE_COMPILER_IS_GNUCC)
  设置(CMAKE_INCLUDE_SYSTEM_FLAG_C“-isystem”)
万一()

更新:

CMake开发者已经在2.8.5中解决了这个问题

您可以尝试使用CMAKE_C_FLAGSCMAKE_CXX_FLAGS来添加其他标志。