4.2 KiB
Скрипт автоматизации сборки DS_UpdateCMakeList
Скрипт на языке PowerShell, предназначенный для автоматизации добавления модулей и драйверов из каталога Library в систему сборки CMake проектов STM32 (генерируемых через STM32CubeMX).
Скрипт полностью исключает необходимость вручную прописывать пути к новым подключаемым датчикам, дисплеям или утилитам внутри файлов CMakeLists.txt.
📌 Принцип работы
- Парсинг меток: Скрипт находит внутри
cmake/stm32cubemx/CMakeLists.txtмаркерные комментарии# Library folderи# Library folder end. - Очистка: Все строки между этими маркерами удаляются, чтобы избежать дублирования данных при повторных запусках.
- Сканирование директорий: Скрипт рекурсивно обходит папку
Library:- Находит все заголовочные файлы (
*.h), уникализирует пути к их папкам с помощью хэш-таблицы и заносит их в переменнуюDS_Include_Dirs. - Находит все файлы исходного кода (
*.c) и формирует из них списокDS_Application_Src.
- Находит все заголовочные файлы (
- Запись: Пути автоматически преобразуются из Windows-формата (
\) в формат путей CMake (/), привязываются к макросу\${CMAKE_SOURCE_DIR}и дописываются в файл конфигурации.
📁 Требования к структуре проекта
Скрипт жестко завязан на относительное расположение файлов и ожидает следующую структуру папок в вашем проекте:
Имя_Проекта/
├── cmake/
│ └── stm32cubemx/
│ └── CMakeLists.txt # Целевой файл конфигурации сборки
├── Library/ # Корневой каталог всех ваших модулей
│ ├── DS_ST7789V/
│ ├── DS_I2CScanner/
│ └── ...
└── tools/
└── UpdateCMakeList.ps1 # Данный скрипт автоматизации
💻 Интеграция и запуск
1. Подготовка CMakeLists.txt
Перед самым первым запуском скрипта убедитесь, что в вашем файле cmake/stm32cubemx/CMakeLists.txt присутствуют маркерные строки. Добавьте их в конец файла:
# Library folder
# Library folder end
2. Запуск скрипта
Вы можете запустить скрипт через терминал PowerShell:
cd tools/
./UpdateCMakeList.ps1
Примечание: Если операционная система блокирует запуск внешних скриптов, предварительно разрешите выполнение командлетом: Set-ExecutionPolicy RemoteSigned -Scope Process.
📋 Результат работы скрипта
После успешного выполнения скрипта маркерный блок в файле CMakeLists.txt автоматически заполнится актуальными путями:
# Library folder
set(DS_Include_Dirs
\${CMAKE_SOURCE_DIR}/Library/DS_I2CScanner/Inc
\${CMAKE_SOURCE_DIR}/Library/DS_ST7789V/Inc
)
target_include_directories(stm32cubemx INTERFACE \${DS_Include_Dirs})
set(DS_Application_Src
\${CMAKE_SOURCE_DIR}/Library/DS_I2CScanner/Src/DS_I2CScanner.c
\${CMAKE_SOURCE_DIR}/Library/DS_ST7789V/Src/DS_ST7789V.c
)
target_sources(\${CMAKE_PROJECT_NAME} PRIVATE \${DS_Application_Src})
# Library folder end