Я просто хотел добавить некоторую справочную информацию (обсуждается, например, здесь, как настроить cmake_c / xx_flags на цепочку инструментов?).
Короче говоря, переменные CMAKE_<LANG>_FLAGS
кэшируются в сценариях CMake<Lang>Information.cmake
(это означает, что вы можете изменить их в приложении CMake с графическим интерфейсом после этапа настройки).
Поэтому вам нужно - если вы устанавливаете их в файле Toolchain - сначала поместить их в кеш . Собственный сценарий CMake (выполняемый после файла Toolchain) не имеет FORCE
, поэтому он не перезапишет его снова.
Загляните в CMakeCInformation.cmake (из share \ cmake-2.8 \ Modules):
set(CMAKE_C_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_C_FLAGS_INIT}")
# avoid just having a space as the initial value for the cache
if(CMAKE_C_FLAGS_INIT STREQUAL " ")
set(CMAKE_C_FLAGS_INIT)
endif()
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_INIT}" CACHE STRING
"Flags used by the compiler during all build types.")
Как видите, официальный способ сделать это - использовать CMAKE_C_FLAGS_INIT
для добавления дополнительных флагов. Проблема в том, что последующие изменения в файле Toolchain не будут распознаваться (кеш не будет перезаписан, см. Выше).
С учетом всего этого ваше временное решение - правильный выбор. Чтобы быть действительно уверенным - поскольку файл Toolchain анализируется дважды во время процесса настройки / генерации, вы даже можете добавить вызов UNSET
перед установкой CMAKE_C_FLAGS
в файле toolchain:
UNSET(CMAKE_C_FLAGS CACHE)
SET(CMAKE_C_FLAGS "-std=gnu99" CACHE STRING "" FORCE)
Другое часто встречающееся решение - использовать что-то вроде:
add_definitions(" -std=gnu99")
для внедрения флагов компиляции (но это не учитывает конфигурацию сборки, как определения переменных). См. Также CMake clang и c ++ 0x
В CMake 2.8.12 были введены новые команды, поэтому вы могли делать (не тестировалось, просто чтобы показать возможности):
add_compile_options("$<$<CONFIG:RELASE>:-std=gnu99>")
add_compile_options("$<$<CONFIG:DEBUG>:-std=gnu99 -g3>")
См. Каков современный метод настройки общие флаги компиляции в CMake? и выражение генератора CMake, различать код C / C ++, чтобы узнать об этом подробнее.
person
Florian
schedule
13.05.2015