【问题标题】:Yocto: have a dependency to a receipe and a PACKAGECONFIGYocto:依赖于收据和 PACKAGECONFIG
【发布时间】:2022-04-20 22:16:16
【问题描述】:

假设我有一个食谱 foo.bb 包含:

PACKAGECONFIG[option1] = "..."
PACKAGECONFIG[option2] = "..."

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

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

RDEPENDS="foo[option1,-option2]"

如何使用 Yocto 做同样的事情?

【问题讨论】:

    标签: yocto yocto-recipe


    【解决方案1】:

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

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

    #foo.inc
    PACKAGECONFIG[option1] = "..."
    PACKAGECONFIG[option2] = "..."
    

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

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

    在正确的包上包含 bar.bb RDEPEND

    #bar.bb
    # Can be foo-option2. Up to you
    RDEPENDS_${PN} += "foo-option1"
    

    另一种方法是添加一个在全局配置文件中设置的全局变量,例如 local.conf 或 distro.conf 并让 foo.bb 使用它来启用选项和栏.conf 检查是否设置了设置,如果没有设置则拒绝。我认为这很脆弱,但它是一个有效的替代方案。

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 2021-11-19
      • 2021-06-24
      • 2021-09-30
      • 2018-05-03
      • 1970-01-01
      相关资源
      最近更新 更多