CMake под Cortex-M: минимальный, но честный
У меня ушло три года, чтобы написать CMake для embedded, который мне нравится. Делюсь.
Принципы
- один
CMakeLists.txtв корне, и один на каждую библиотеку - cross-toolchain через файл, не через переменные окружения
- linker script — отдельный файл, без хитростей
- никаких
file(GLOB ...)
Минимальный toolchain.cmake
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_C_FLAGS_INIT "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16")
Сборка
cmake -B build -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -GNinja
ninja -C build
Никакой магии. После трёх лет в STM32CubeIDE с его сгенерированными makefile'ами — это как глоток воздуха.