Менеджер компонентов (IDF Component Manager [1]) это утилита, которая загрузит зависимости для любого ESP-IDFCMake-проекта. Загрузка произойдет автоматически во время запуска CMake. Источником загрузки компонентов могут быть либо реестр ESP (ESP Component Registry [2], здесь можно найти список компонентов), либо репозиторий Git.
Для подробной информации по менеджеру компонентов и реестру компонентов см. документацию [3].
[Использование менеджера компонентов в проекте]
Зависимости для каждого компонента в проекте определены в отдельном файле манифеста idf_component.yml, который находится в корневой папке компонента (кстати, приложение тоже считается компонентом main, и в случае наличия в приложении зависимостей в папке main проекта также может быть файл idf_component.yml).
Шаблон файла манифеста может быть создан запуском команды idf.py create-manifest. По умолчанию файл манифеста создается для компонента main. Вы можете либо явно указать директорию, где должен быть создан манифест, используя опцию --path, либо явно указать компонент в вашей папке components, используя опцию --component=my_component. Команда create-manifest может быть запущена несколькими способами:
• idf.py create-manifest создаст файл манифеста для компонента main. • idf.py create-manifest --component=my_component создаст файл манифеста для компонента my_component в директории components. • idf.py create-manifest --path="my_component" создаст файл манифеста для компонента my_component в директории my_component.
Когда новый манифест добавлен к одному из компонентов в проекте, необходимо переконфигурировать проект вручную запуском команды idf.py reconfigure. Сборка будет затем отслеживать изменения в манифестах idf_component.yml и автоматически при необходимости запускать CMake.
Чтобы добавить зависимость к компоненту (например, my_component) в свой проект ESP-IDF, вы можете запустить команду idf.py add-dependency DEPENDENCY. Аргумент DEPENDENCY представляет дополнительный компонент, управляемый менеджером компонентов, от которого зависит my_component. Это определено в формате namespace/name=1.0.0, где namespace/name это имя компонента, и =1.0.0 диапазон версий компонента, см. документацию по организации версий [4]. По умолчанию зависимости добавляются для компонента main. Вы можете либо явно указать директорию, где находится манифест, с помощью опции --path, либо указать компонент в вашей папке components, используя --component=my_component. Команда add-dependency может быть запущена следующими способами:
• idf.py add-dependency example/cmp добавит зависимость на самой свежей версии example/cmp к компоненту main. • idf.py add-dependency --component=my_component example/cmp< =3.3.3 добавит зависимость на версии < =3.3.3 example/cmp к компоненту my_component в директории components. • idf.py add-dependency --path="my_component" example/cmp^3.3.3 добавит зависимость на версии ^3.3.3 example/cmp к компоненту my_component в директории my_component.
Замечание: команда add-dependency добавляет зависимости для вашего проекта явно из ESP Component Registry.
Для обновления зависимостей проекта ESP-IDF вы можете запустить команду idf.py update-dependencies. Вы можете также указать путь до проекта, используя --project-dir PATH.
Репозиторий build_system/cmake/component_manager демонстрирует, как использовать IDF Component Manager для загрузки зависимостей из ESP Component Registry.
Необязательно иметь манифест для компонентов, которые не нуждаются ни в каких обслуживаемых зависимостях.
Когда CMake конфигурирует проект (например, когда запускается команда idf.py reconfigure) менеджер компонентов делает следующее:
• Обрабатывает манифесты idf_component.yml для каждого компонента в проекте, и рекурсивно разрешает зависимости. • Создает файл dependencies.lock в корневой директории проекта с полным списком зависимостей. • Загружает все зависимости в директорию managed_components.
Подразумевается, что файл блокировки dependencies.lock и содержимое директории managed_components это не те вещи, которые должен изменять вручную пользователь. Когда запускается менеджер компонентов, он всегда обеспечивает их актуальность. Если же эти файлы были случайно изменены, можно перезапустить менеджер компонентов вовлечением CMake командой idf.py reconfigure.
Вы можете установить свойство DEPENDENCIES_LOCK для указания пути lock-файла в CMakeLists.txt верхнего уровня. Например, добавление idf_build_set_property(DEPENDENCIES_LOCK dependencies.lock.${IDF_TARGET}) перед project(PROJECT_NAME) поможет генерировать разные lock-файлы для разных target-ов.
[Создание проекта из примера]
Некоторые компоненты в ESP Component Registry содержат проекты примера. Чтобы создать новый проект из примера, вы можете запустить команду idf.py create-project-from-example EXAMPLE. Аргумент EXAMPLE должен быть в формате namespace/name=1.0.0:example, где namespace/name имя компонента, =1.0.0 диапазон версий компонента [4], и example это имя примера. В ESP Component Registry вы можете найти список примеров для каждого компонента и команды для начала работы ним.
[Определение зависимостей в манифесте]
Вы можете просто определить зависимости в файле манифеста idf_component.yml путем его изменения в текстовом редакторе. Ниже показаны основные примеры, которые демонстрируют, как определять зависимости.
Вы можете определить зависимость из реестра ESP Component Registry путем указания имени и диапазона версий в файле idf_component.yml. Вот так это делается на примере компонента Knob [5] для подключения поворотного энкодера к ESP32-C3 (то же самое можно сделать командой idf.py add-dependency "espressif/knob>=1.0.0"):
dependencies:
# Определение зависимости из реестра ESP Component Registry
# (https://components.espressif.com/components/espressif/knob):
espressif/knob: ">=1.0.0"
Чтобы определить зависимость из репозитория Git, предоставьте URL репозитория компонента в поле git:, а также опционально путь путь path: до компонента (если его не указать, то папка компонента будет по умолчанию автоматически создана в директории managed_components):
dependencies:
# Определение зависимости из репозитория Git:
test_component:
path: test_component
git: ssh://git@gitlab.com/user/components.git
Во время разработки компонентов вы можете использовать компоненты из локальной директории путем указания либо относительного, либо абсолютного пути:
dependencies:
# Определение локальной зависимости с относительным путем:
some_local_component:
path: projects/component
Для подробной информации по формату файла манифеста см. [6].
[Запрет Component Manager]
Менеджер компонентов можно явно отключить, установив в 0 переменную окружения IDF_COMPONENT_MANAGER.
[Ссылки]
1. IDF Component Manager site:espressif.com. 2. The ESP Component Registry site:espressif.com. 3. IDF Component Manager and ESP Component Registry Documentation site:espressif.com. 4. ESP-IDF Versioning site:espressif.com. 5. espressif/knob site:components.espressif.com. 6. idf_component.yml Manifest File site:espressif.com. 7. ESP-IDF Build System. |