LINUX.ORG.RU

CMake игнорирует опцию C_STANDARD_REQUIRED

 ,


0

1

... и устанавливает стандарт C89. Прописал в CMakeLists.txt

project(hello-world LANGUAGES C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

...

Сборка падает при использовании inline функций, если собирать все руками с помощью clang/gcc с -std=c11 - все ок.

Это баг или фича такая?

Версия CMake 3.22.1

★★★★★
Ответ на: комментарий от Meyer

В CMake 3.25 работает. Для GCC генерируется C_FLAGS = -std=gnu11.

dataman ★★★★★
()

если собирать все руками с помощью clang/gcc с -std=c11 - все ок.

Тогда так:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} "-std=c11").

dataman ★★★★★
()

Сделай make VERBOSE=1 или как то так и посмотри какие опции передаются компилятору.

ox55ff ★★★★★
()

Чисто теоретически если проект находится в IDE, то IDE может изменять опции при сохранении CMakeLists.txt, либо при сборке.

Пробовал напрямую передавать?

cmake -B build -DCMAKE_C_COMPILER=clang -DCMAKE_C_STANDARD=11 -DCMAKE_C_STANDARD_REQUIRED=ON

cmake --build build

Dr64h ★★★
()
Ответ на: комментарий от Dr64h

Ещё вполне вероятно, что cmake не подхватывает изменения из-за кэша. Я обычно в ходе таких экспериментов полностью очищают сборочную директорию

DrBrown
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.