Ответ 1
После создания цели, такой как библиотека или исполняемый файл, поместите такую строку в файл CMakeLists.txt:
set_property(TARGET tgt PROPERTY C_STANDARD 99)
где tgt
- имя вашей цели.
Я думаю, что это было добавлено в CMake 3.1, и документация здесь:
http://www.cmake.org/cmake/help/v3.1/prop_tgt/C_STANDARD.html
Если вам нужно поддерживать версии CMake старше 3.1, вы можете использовать этот макрос:
macro(use_c99)
if (CMAKE_VERSION VERSION_LESS "3.1")
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
set (CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}")
endif ()
else ()
set (CMAKE_C_STANDARD 99)
endif ()
endmacro(use_c99)
После помещения этого макроса в файл верхнего уровня, чтобы он был виден повсюду, вы можете просто написать use_c99()
в верхней части любого файла CMakeLists, который определяет цель с кодом C99 в нем.
CMake выпуск № 15943 для пользователей clang, ориентированных на macOS
Если вы используете CMake и clang для нацеливания на MacOS, существует ошибка bug, которая может привести к тому, что функция CMAKE_C_STANDARD
просто не будет работать (не добавлять какие-либо флаги компилятора). Убедитесь, что вы делаете одно из следующих действий:
- Используйте cmake_minimum_required, чтобы потребовать CMake 3.0 или новее, или
Установите для политики CMP0025 значение NEW с помощью следующего кода в верхней части файла CMakeLists.txt перед командой
project
:# Fix behavior of CMAKE_C_STANDARD when targeting macOS. if (POLICY CMP0025) cmake_policy(SET CMP0025 NEW) endif ()