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