gcc - compiler - Use-istema en lugar de-I con CMake
cmake set compiler (3)
Como ya se dijo, la forma correcta de incluir las rutas del sistema es:
include_directories(SYSTEM path1 path2)<br>
Sin embargo, a partir de CMake 2.8.4 y Makefiles, esto solo se usa para C ++ y no para C, lo investigué y GNU.cmake no se inicializa: CMAKE_INCLUDE_SYSTEM_FLAG_C
Entonces puede configurarlo usted mismo después de llamar a project()
.
if(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ") endif()
Actualizar:
Los desarrolladores de CMake han solucionado esto en 2.8.5
¿Hay alguna forma en CMake de forzar una ruta especificada a través de include_directories (o quizás a través de una función diferente) para usar la bandera -isystem en lugar de la bandera -I cuando se compila con gcc?
Consulte http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options para obtener detalles sobre -I y -isystem.
Podría intentar usar CMAKE_C_FLAGS
y CMAKE_CXX_FLAGS
para agregar indicadores adicionales.
Sí, fuerza un camino para que sea un sistema incluido mediante el uso de la bandera SYSTEM opcional
include_directories(SYSTEM path)
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:include_directories
A partir de CMake 2.8.12 puede usar los nuevos directorios target_include_directories para incluir el directorio del sistema incluye en el nivel objetivo, mientras aprovecha las nuevas características de requisitos de uso de cmake:
target_include_directories(foo SYSTEM PUBLIC path)
Ahora target foo usará path como un sistema include, y todo lo que se vincule con foo también usará path tan automáticamente como lo hace un sistema. Puede controlar la propagación de estos requisitos de uso cambiando la palabra clave PUBLIC a PRIVADO o INTERFAZ.
http://cmake.org/cmake/help/v2.8.12/cmake.html#command:target_include_directories