Зависимости#
Приложение должно содержать всё, что нужно программе для работы, но не дублировать то, что уже даёт среда выполнения. aft-app разбирает зависимости пакета, сравнивает их с составом среды и переносит в приложение только недостающее. Этим поведением можно управлять вручную.
Разбор и сравнение со средой выполнения#
Для пакета из репозитория, локального deb и deb по ссылке зависимости разбираются автоматически и сравниваются с составом указанной среды выполнения: то, что среда уже даёт, в приложение не попадает. Для остальных источников (архив, перенос из системы, сборка из исходников) автоматический разбор не выполняется - состав задаётся источником и дополнительными пакетами.
Разбор можно отключить полностью полем манифеста dependencies.analyze: тогда
в приложение попадёт только сам пакет и то, что добавлено вручную.
По умолчанию учитываются только обязательные зависимости. Рекомендуемые и
предлагаемые пакеты включаются полями манифеста
dependencies.includeRecommends и dependencies.includeSuggests (см.
Манифест приложения). Флагов командной строки для них нет: сборка по флагам всегда
берёт только обязательные зависимости.
Предварительный анализ#
Посмотреть результат разбора, не запуская сборку, позволяет команда analyze. Она показывает не только покрытие зависимостей средой, но и подбирает саму среду и предлагает разрешения песочницы. Подробно - в блоке Предварительный анализ.
aft-app analyze --package myapp --runtime org.astralinux.Platform
Ручное управление составом#
Состав приложения можно дополнить или подправить:
--dep <пакет>- доложить пакет с его зависимостями. То, что уже есть в среде выполнения, не дублируется. В манифесте -dependencies.additional.--force-dep <пакет>- включить пакет всегда, даже если он есть в среде (dependencies.force).--exclude-dep <пакет>- не включать указанный пакет (dependencies.exclude).
Все три флага повторяемы и работают для любого источника. В отличие от сборочных зависимостей, эти пакеты попадают в готовое приложение - это его библиотеки времени выполнения.
Сборочные зависимости#
При сборке из исходников в SDK может не хватать заголовков или библиотек. Их подключают только на время сборки; в готовое приложение они не попадают.
--build-dep <пакет>- пакет из репозитория.--build-dep-deb <файл>- локальный deb.--build-dep-url <ссылка>- deb по ссылке.--build-dep-tar <архив>- tar-архив с зависимостями.--build-env KEY=VALUE- дополнительная переменная окружения для сборки.
Все флаги повторяемы. Сборочные зависимости распаковываются во временный
каталог, подключаемый к песочнице сборки, и инструмент сам настраивает
окружение, чтобы компилятор, CMake и pkg-config нашли заголовки и библиотеки.
Своими переменными окружения (--build-env) можно дополнить настройку. В
манифесте всё это - секция source.sourcedir (поля buildDeps и
buildEnv, см. Манифест приложения).
sudo aft-app package --source-dir /path/to/src \
--build-dep nlohmann-json3-dev \
--build-dep-tar /opt/extra-libs.tar.xz \
--build-env "CC=gcc" \
--build-cmd "cmake -S . -B /tmp/b -DCMAKE_INSTALL_PREFIX=/app && cmake --build /tmp/b -j && cmake --install /tmp/b" \
--id org.astra.MyApp --name MyApp --command myapp \
--runtime org.astra.Platform --runtime-version 1.8