Подтвердить что ты не робот

Использовать -систему вместо -I с CMake

Есть ли какой-либо способ в CMake, чтобы заставить путь, указанный через include_directories (или, возможно, через другую функцию) использовать флаг -системы вместо флага -I при построении с помощью gcc?

Подробнее о функции -I и -системе см. http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options.

4b9b3361

Ответ 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 для добавления дополнительных флагов.