Дело в следующем: есть ipk с именем A и другой с именем B.
B имеет зависимость во время выполнения от A (в соответствии с рецептом bitbake A)
Однако исходный файл в B имеет #include <some_header_in_A>
Это выглядит как зависимость от сборки, но тогда я не могу объяснить себе, почему рецепт bitbake работает с зависимостью во время выполнения.
Приветствуется любая помощь, а также ссылка на какое-то пояснительное руководство.
Возможна ли зависимость во время выполнения путем включения файла заголовка?
Ответы (1)
Вспомните мой ответ на другой ваш вопрос.
Если T ЗАВИСИТ от P, тогда задача
do_configure
T будет зависеть от задачиdo_populate_sysroot
пользователя P.Если T RDЗАВИСИТ от P, то задача
do_build
T будет зависеть от задачиdo_package_write
пользователя P.
Таким образом, тот факт, что ваш B RDEPENDS
на вашем A означает, что A уже прошел все этапы вплоть до do_package_write
при построении B
, включая do_populate_sysroot
. Поэтому любые заголовки, которые A экспортирует в sysroot, уже будут там, когда B будет собран, и зависимость времени сборки будет удовлетворена.
Если B включает заголовки, экспортированные A, это является зависимостью времени сборки. Но это не исключает того, что B также зависит от A во время выполнения. На самом деле обычно бывает так, что если B зависит от A во время выполнения, то он также зависит от времени сборки от A именно потому, что ( для пакетов C/C++) зависимость времени выполнения обычно означает, что для сборки B нужны заголовки из A.
Если в вашем рецепте только указано B RDEPENDS
на A, то для успеха требуется немного удачи. Если бы случилось так, что do_configure
B включала проверку существования заголовков A, и всех зависимостей в play сделал возможным запуск do_configure
B до завершения do_populate_sysroot
A, тогда эта проверка заголовков A могла завершиться ошибкой .
Чтобы рецепт был полностью правильным и безопасным, в нем должно быть указано, что B RDEPENDS
на A и что B DEPENDS
на A.