Clang stdlib heades и cmake [duplicate]

См. https://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlineonattributes (v = vs.110) .aspx

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineOnAttributes = true;

14
задан ejoerns 18 July 2012 в 08:47
поделиться

2 ответа

Я нашел временное решение, заменив строку

SET(CMAKE_C_FLAGS "-std=gnu99")

на

SET(CMAKE_C_FLAGS "-std=gnu99" CACHE STRING "" FORCE)
14
ответ дан ejoerns 19 August 2018 в 12:01
поделиться
  • 1
    Он работает, спасибо (я добавил строку сразу после инструкции «project») – Thomas K 9 September 2014 в 07:44

Я просто хотел добавить некоторую справочную информацию (обсуждалось, например, здесь , как установить cmake_c / xx_flags для инструментальной цепочки? ).

Короче говоря, переменные CMAKE_<LANG>_FLAGS кэшируются по дизайну в сценариях CMake<Lang>Information.cmake (что означает, что вы можете изменить их в приложении графического интерфейса CMake после шага настройки).

Итак, вы должны - если установить их в файл Toolchain - сначала поместите их в кеш. Собственный скрипт CMake (выполненный после файла Toolchain) не поставляется с FORCE, поэтому он не будет перезаписывать его снова.

Взгляните на CMakeCInformation.cmake (из share \ cmake-2.8 \ Модули):

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 анализируется дважды во время процесса Configuration / Generation - вы могли бы даже добавить вызов UNSET перед установкой CMAKE_C_FLAGS в файл инструментальной цепочки:

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 ++ для получения дополнительной информации о это.

8
ответ дан Community 19 August 2018 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: