Я пытаюсь напечатать флаги компиляции, которые установлены для цели. Наилучшим сценарием является печать строки с текущими флагами во время конфигурирования и компиляции, но если это невозможно, то только во время конфигурирования (или только компиляция) (приемлемое решение).
Это мой тестовый файл .c:
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
И CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(cmake_gcc_options_try_c C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
add_executable(cmake_gcc_options_try_c main.c)
target_compile_options(cmake_gcc_options_try_c
PUBLIC -W -Wall -Wextra -pedantic -pedantic-errors)
# This fails
message("-- Current compiler flags CMAKE_C_FLAGS are: ${CMAKE_C_FLAGS}")
message("-- Current compiler flags C_FLAGS are: ${C_FLAGS}")
и
cmake . && make
Дает этот вывод:
-- The C compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Current compiler flags CMAKE_C_FLAGS are:
-- Current compiler flags C_FLAGS are:
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/Projects/cmake-gcc-options-try-c
Scanning dependencies of target cmake_gcc_options_try_c
[ 50%] Building C object CMakeFiles/cmake_gcc_options_try_c.dir/main.c.o
[100%] Linking C executable cmake_gcc_options_try_c
[100%] Built target cmake_gcc_options_try_c
Почему CMAKE_C_FLAGS
и C_FLAGS
печатаются так, как они не определены?
Как добиться этой печати по команде make
:
[ 50%] Building C object CMakeFiles/cmake_gcc_options_try_c.dir/main.c.o
[ 50%] Current compiler flags are: -W -Wall -Wextra -pedantic -pedantic-errors -std=gnu11
[100%] Linking C executable cmake_gcc_options_try_c
[100%] Built target cmake_gcc_options_try_c
Обновление: Виктор Сергиенко пришел с рабочим решением, но одна проблема с этим, это не так красиво печатать:
Есть мысли, как сделать так, чтобы это было в формате других принтов? Например :
[ 50%] Building C object CMakeFiles/cmake_gcc_options_try_c.dir/main.c.o
[100%] Linking C executable cmake_gcc_options_try_c
[100%] Current compiler flags are: -W -Wall -Wextra -pedantic -pedantic-errors -std=gnu11
[100%] Built target cmake_gcc_options_try_c
Вторая проблема заключается в том, что -std=gnu11
не печатается (но он активируется с set(CMAKE_C_STANDARD 11)
и set(CMAKE_C_STANDARD_REQUIRED ON)
)