Yocto:依赖于收据和 PACKAGECONFIG

Sté*_*ret 6 yocto yocto-recipe

让\xe2\x80\x99s 说我有一个食谱foo.bb包含:

\n
PACKAGECONFIG[option1] = "..."\nPACKAGECONFIG[option2] = "..."\n
Run Code Online (Sandbox Code Playgroud)\n

现在,我想为 bar 包编写一个配方。为了运行,bar需要使用选项option1而不是option2来编译包foo

\n

我知道 Yocto 的灵感来自于 Gentoo Portage。在portage中,这种依赖关系会这样写(https://devmanual.gentoo.org/general-concepts/dependency/#built-with-use-dependencies):

\n
RDEPENDS="foo[option1,-option2]"\n
Run Code Online (Sandbox Code Playgroud)\n

我\xe2\x80\xaf如何与Yocto做同样的事情?

\n

Pau*_*ves 2

yocto 中没有 RDEPENDS 这样的机制。您可以通过以下方式获得相同的结果:

将 foo.bb 指令放入.inc文件中

#foo.inc
PACKAGECONFIG[option1] = "..."
PACKAGECONFIG[option2] = "..."
Run Code Online (Sandbox Code Playgroud)

根据 .inc 和相关的 PACKAGECONFIG 变量创建foo-option1.bbfoo-option2.bb

#foo-option1.bb
require foo.inc
PACKAGECONFIG = "option1"


#foo-option2.bb
require foo.inc
PACKAGECONFIG = "option2"
Run Code Online (Sandbox Code Playgroud)

将 bar.bb RDEPEND 放在正确的包上

#bar.bb
# Can be foo-option2. Up to you
RDEPENDS_${PN} += "foo-option1"
Run Code Online (Sandbox Code Playgroud)

另一种方法是添加在全局配置文件(如 local.conf 或 distro.conf)中设置的全局变量,并让foo.bb使用它来启用该选项,并让 bar.conf 检查该设置是否已设置并如果没有就拒绝。我认为这很脆弱,但却是一个有效的选择。

还有其他方法,但我相信从我的角度来看这是最简单的。如果你真的想知道其他方法,请告诉我,但它们更丑陋。

PS:请记住,RDEPENDS 用于声明包对运行时包的依赖关系而不是配方。这意味着 RDEPENDS 应始终为 RDEPENDS_${PN} 或其相关包的名称。