情况是:有一个名为 A 的 ipk 和另一个名为 B.B
对 A 有运行时依赖项(根据 A 的 bitbake 配方)
但是,B 中的源文件#include <some_header_in_A>
对我来说这看起来像是一个构建依赖项,但后来我无法向自己解释为什么 bitbake 配方具有运行时依赖性。
任何帮助表示赞赏,还有一些解释性教程的链接。
1 回答
回想一下我对你其他问题的回答。
如果T DEPENDS on P那么T的
do_configure
任务依赖于P的do_populate_sysroot
任务。如果T RDEPENDS 依赖于P则T的
do_build
任务将依赖于P的do_package_write
任务。
因此,您的B RDEPENDS
在您的 A上的事实意味着Ado_package_write
在构建时已经通过了所有阶段B
,包括
do_populate_sysroot
. 因此,在构建B时, A导出到 sysroot 的任何标头都已经存在,并且将满足构建时间依赖性。
如果B包含由A导出的标头,则这是构建时依赖项。但这并不排除B也对A有运行时依赖。实际上,通常情况下,如果B运行时依赖于A ,那么它也依赖于构建时A,正是因为(对于 C/C++ 包)运行时依赖通常意味着构建B需要来自A 的头文件。
如果您的配方仅在A上指定B ,那么它需要一点点运气才能成功。如果碰巧B包含对A标头
是否存在的检查,并且所有正在运行的依赖项使得B可以在A完成
之前运行,那么该检查A标头可能会失败。RDEPENDS
do_configure
do_configure
do_populate_sysroot
为了使配方完全正确和安全,它应该同时指定A RDEPENDS
上的B和A 上的B。 DEPENDS