Pull to refresh

Comments 5

Интересные извращения. И все же, чем оно удобнее стандартного CMake? В крайнем случае, если хочется пользоваться менюшками и конфигами, а не кодом CMake, можно перейти на Visual Studio + VisualGDB. Про CubeIDE лучше забыть поскорее и не трогать никогда.

Больше продиктовано нелюбовью к CMake, особенно когда начинается чехарда, когда чуть ли не в каждой подпапке приходится создавать конфигурационный файл. Написание Lua скрипта мне показалось приятнее по внешнему виду и достаточно держать одного его в корне проекта.

И по мне приятная особенность: создание задач в Lua скрипте. Можно быстро добавить выполнение какой-либо последовательности действий, вызывая ее через консоль.

Если вы делаете собственный хобби-проект, то конечно можно что угодно использовать (я вот platformio люблю), но в рабочих проектах всё-таки надо ориентироваться на распространенные инструменты, по которым есть шанс найти специалистов на рынке труда, и где все грабли найдены и задокументированы.

PS. Меня от синтаксиса cmake тоже тошнит, но это более-менее стандарт...

В целом согласен с Вами. Но и Xmake не такой уж ноунейм проект. По большому счету, если очень сильно все упростить, то расширение просто задает дефайны компиляции для gcc/g++, вся работа в итоге лежит на нем.

Я просто в цикле по пакам и файлам бегал и в библиотеки собирал. До появления СМаке в кубе я СМаком парсил мэйкфайл и настраивал флаги и бинари в СМаке. По сравнению с мэйкфайлами СМаке — это как питон или 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
)
Sign up to leave a comment.

Articles