Comments 5
Интересные извращения. И все же, чем оно удобнее стандартного CMake? В крайнем случае, если хочется пользоваться менюшками и конфигами, а не кодом CMake, можно перейти на Visual Studio + VisualGDB. Про CubeIDE лучше забыть поскорее и не трогать никогда.
Больше продиктовано нелюбовью к CMake, особенно когда начинается чехарда, когда чуть ли не в каждой подпапке приходится создавать конфигурационный файл. Написание Lua скрипта мне показалось приятнее по внешнему виду и достаточно держать одного его в корне проекта.
И по мне приятная особенность: создание задач в Lua скрипте. Можно быстро добавить выполнение какой-либо последовательности действий, вызывая ее через консоль.
Если вы делаете собственный хобби-проект, то конечно можно что угодно использовать (я вот platformio люблю), но в рабочих проектах всё-таки надо ориентироваться на распространенные инструменты, по которым есть шанс найти специалистов на рынке труда, и где все грабли найдены и задокументированы.
PS. Меня от синтаксиса cmake тоже тошнит, но это более-менее стандарт...
Я просто в цикле по пакам и файлам бегал и в библиотеки собирал. До появления СМаке в кубе я СМаком парсил мэйкфайл и настраивал флаги и бинари в СМаке. По сравнению с мэйкфайлами СМаке — это как питон или lua, очередной скриптовый язык, в котором всё более-менее понятно. Само качает подключает и настраивает. Смотрю изобретателей велосипеда меньше не становиться.
cmake_minimum_required(VERSION 4.00)
set(CMAKE_CXX_STANDARD 26)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
project(F031K6 CXX ASM)
# Populate CMSIS using stm32
stm32_fetch_cmsis(F0)
find_package(CMSIS COMPONENTS STM32F0 REQUIRED)
include(FetchContent)
FetchContent_Declare(
ctre
GIT_REPOSITORY https://github.com/hanickadot/compile-time-regular-expressions.git
GIT_TAG main
GIT_SHALLOW ON)
FetchContent_Declare(
pfr
GIT_REPOSITORY https://github.com/boostorg/pfr.git
GIT_TAG master
GIT_SHALLOW ON)
FetchContent_MakeAvailable(pfr ctre)
# Project sources
file(GLOB_RECURSE SOURCES src/*.cpp src/*.c src/*.h)
# Add executable (firmware) target
add_executable(${PROJECT_NAME} ${SOURCES})
# Recommended options for stm32 dev
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<COMPILE_LANGUAGE:CXX>:
-Wno-volatile
-fno-asynchronous-unwind-tables
-fno-exceptions
-fno-non-call-exceptions
-fno-rtti
-fno-use-cxa-atexit
-fpermissive
>
# -ffast-math
-Wall
# -Wconversion
-Werror
-Wextra
-Wimplicit-fallthrough
-Wpedantic
-g3
-ffunction-sections
-fdata-sections
# -flto
)
# Link options
target_link_options(${PROJECT_NAME} PRIVATE
# -flto
-Wl,--print-memory-usage
-Wl,--gc-sections
"-Wl,-Map=${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.map")
# Link CMSIS and other dependences here
target_link_libraries(${PROJECT_NAME} PRIVATE
ctre::ctre
pfr::pfr
CMSIS::STM32::F031K6
STM32::NoSys
STM32::Nano
)
Замена STM32CubeIDE и переход в среду VSCode для Embedded-разработки