案例是:有一个叫做A的ipk和另一个叫做B.的
B具有与A的运行时依赖性(根据A的bitbake配方)
但是,B中的源文件具有#include <some_header_in_A>
这看起来像是对我的构建依赖,但是我无法向自己解释为什么bitbake配方具有运行时依赖性。
感谢任何帮助,也是一些解释性教程的链接。
答案 0 :(得分:1)
回想一下answer to your other question。
如果 T 依赖于 P ,那么 T 的do_configure
任务将依赖于
在 P 的do_populate_sysroot
任务。
如果在 P 上 T RDEPENDS,那么 T 的do_build
任务ia依赖于 P 的
do_package_write
任务。
因此 A 上的 B RDEPENDS
意味着 A 已经存在
在构建do_package_write
时,通过B
传递所有阶段,包括
do_populate_sysroot
。因此, A 的任何标头都会导出到sysroot
构建 B 时已存在,并且将满足构建时依赖性。
如果 B 包含由 A 导出的标头,则此 是构建时依赖项。但那 不排除 B 也对 A 具有运行时依赖性。事实上它通常是 如果 B 依赖于运行时 A ,那么它也是依赖于构建时间的 在 A 上,正是因为(对于C / C ++包)通常的运行时依赖性 表示构建 B 需要来自 A 的标题。
如果您的食谱仅在 A 上指定 B RDEPENDS
,那么它需要一点点
幸运的是成功。如果碰巧是 B 的do_configure
包括检查是否存在 A 标题,和所有
游戏中的依赖关系使 B 的do_configure
成为可能
在 A 的do_populate_sysroot
完成之前运行,然后就是这样
检查 A 标头可能会失败。
为使配方完全正确和安全,它应指定两者
B RDEPENDS
A 和 B DEPENDS
A