Используйте -isystem вместо -I с CMake - PullRequest
46 голосов
/ 30 июля 2010

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

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

Ответы [ 3 ]

60 голосов
/ 30 июля 2010

Да, вы заставляете путь быть включенным в систему, используя дополнительный флаг 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)

Теперь целевой foo будет использовать path как системное включение и все, что связано с foo также будет использовать path так же автоматически, как и системное включение. Вы можете контролировать распространение этих требований использования, изменив ключевое слово PUBLIC на PRIVATE или INTERFACE.

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

10 голосов
/ 08 июня 2011

Как уже говорилось, правильный путь для включения системных путей:

include_directories(SYSTEM path1 path2)<br>

Однако, начиная с CMake 2.8.4 и Makefiles, он используется только для C ++, а не для C, я изучил его иGNU.cmake не инициализирует: CMAKE_INCLUDE_SYSTEM_FLAG_C

Так что вы можете установить это самостоятельно после вызова project().

if(CMAKE_COMPILER_IS_GNUCC)
  set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
endif()

Обновление:

Разработчики CMake имеютисправил это в 2.8.5

0 голосов
/ 30 июля 2010

Вы можете попробовать использовать CMAKE_C_FLAGS и CMAKE_CXX_FLAGS для добавления дополнительных флагов.

...