Использовать -систему вместо -I с CMake
Есть ли какой-либо способ в CMake, чтобы заставить путь, указанный через include_directories (или, возможно, через другую функцию) использовать флаг -системы вместо флага -I при построении с помощью gcc?
Подробнее о функции -I и -системе см. http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options.
Ответы
Ответ 1
Да, вы вынуждаете путь для включения системы с помощью необязательного флага SYSTEM
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:
target_include_directories(foo SYSTEM PUBLIC path)
Теперь target foo будет использовать путь в качестве системы, и все, что ссылается на
foo также будет использовать путь как автоматически, как система. Вы можете управлять распространением этих требований использования, изменив ключевое слово PUBLIC на PRIVATE или INTERFACE.
http://cmake.org/cmake/help/v2.8.12/cmake.html#command:target_include_directories
Ответ 2
Как уже говорилось, правильным способом включения системных путей является:
include_directories(SYSTEM path1 path2)<br>
Однако, как и у CMake 2.8.4 и Makefiles, это используется только для С++, а не C, я просмотрел его, и GNU.cmake не инициализируется: CMAKE_INCLUDE_SYSTEM_FLAG_C
Итак, вы можете установить это самостоятельно сразу после вызова project()
.
if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
endif()
Update:
Разработчики CMake исправили это в 2.8.5
Ответ 3
Вы можете попробовать использовать CMAKE_C_FLAGS
и CMAKE_CXX_FLAGS
для добавления дополнительных флагов.