在CMake中,当使用gcc进行构建时,是否有任何方法可以强制通过include_directories(或者通过其他函数)指定的路径使用-isystem标志而不是-I标志?有关http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options-I和-isystem的详细信息,请访问www.example.com。
nxowjjhe1#
是,通过使用可选的SYSTEM标志强制路径成为系统包含
include_directories(SYSTEM path)
https://cmake.org/cmake/help/latest/command/include_directories.html从CMake 2.8.12开始,您可以使用新的target_include_directories在目标级别包含系统目录include,同时利用cmake的新使用要求特性:
target_include_directories(foo SYSTEM PUBLIC path)
现在目标foo将使用path作为一个系统包含,并且链接到foo的任何内容也将自动使用path作为一个系统包含。您可以通过将PUBLIC关键字更改为PRIVATE或INTERFACE来控制这些使用要求的传播。https://cmake.org/cmake/help/latest/command/target_include_directories.html
8yoxcaq72#
如前所述,包含系统路径的正确方法是:
include_directories(SYSTEM path1 path2)
然而,在CMake 2.8.4和Makefiles中,这只用于C++而不是C,我研究了一下,GNU.cmake没有初始化:CMAKE_INCLUDE_SYSTEM_FLAG_C因此,您可以在调用project()后立即自行设置此参数。
CMAKE_INCLUDE_SYSTEM_FLAG_C
project()
if(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ") endif()
CMake开发人员在2.8.5中修复了这个问题
h5qlskok3#
您可以尝试使用CMAKE_C_FLAGS和CMAKE_CXX_FLAGS来添加其他标志。
CMAKE_C_FLAGS
CMAKE_CXX_FLAGS
3条答案
按热度按时间nxowjjhe1#
是,通过使用可选的SYSTEM标志强制路径成为系统包含
https://cmake.org/cmake/help/latest/command/include_directories.html
从CMake 2.8.12开始,您可以使用新的target_include_directories在目标级别包含系统目录include,同时利用cmake的新使用要求特性:
现在目标foo将使用path作为一个系统包含,并且链接到foo的任何内容也将自动使用path作为一个系统包含。您可以通过将PUBLIC关键字更改为PRIVATE或INTERFACE来控制这些使用要求的传播。
https://cmake.org/cmake/help/latest/command/target_include_directories.html
8yoxcaq72#
如前所述,包含系统路径的正确方法是:
然而,在CMake 2.8.4和Makefiles中,这只用于C++而不是C,我研究了一下,GNU.cmake没有初始化:
CMAKE_INCLUDE_SYSTEM_FLAG_C
因此,您可以在调用
project()
后立即自行设置此参数。更新:
CMake开发人员在2.8.5中修复了这个问题
h5qlskok3#
您可以尝试使用
CMAKE_C_FLAGS
和CMAKE_CXX_FLAGS
来添加其他标志。