【问题标题】:Yocto - Why can't I override the build task?Yocto - 为什么我不能覆盖构建任务?
【发布时间】:2021-08-29 22:56:49
【问题描述】:

我正在使用我自己的 yocto 层/食谱来弄清楚一切是如何协同工作的,并且我看到了一些与构建任务相关的非常令人困惑的行为。这是我的名为 condtest 的测试配方:

ICENSE = "GPLv2+ & LGPLv2+"

DISTRO = ""

do_print() {

     echo "print"
}

addtask print

do_fetch() {
    echo "fetch"
}

addtask fetch before build

do_build() {
    echo "build"
}
addtask build 



do_compile() {
    :
}
addtask compile

所以如果我运行bitbake -c fetch condtest,我会看到“fetch”完全符合我的预期,所以这是有道理的。但是,当我运行bitbake -c build condtest 时,bitbake 不会回显“build”,而是会开始获取和编译一堆包。更让我困惑的是,如果我将 -e 标志添加到这两个命令,它们的输出几乎相同,所以我不确定为什么 bitbake 似乎开始使用默认构建任务构建完全不同的配方,而不是使用覆盖我在配方中定义的构建任务。

【问题讨论】:

    标签: task yocto bitbake openembedded


    【解决方案1】:

    基础 bbclass 文件(meta/classes/base.bbclass)设置:

    do_build[noexec] = "1
    

    这意味着函数的内容没有被执行,它只是依赖图的占位符任务。这就是为什么您永远看不到构建任务的输出的原因。

    正如其他答案中提到的,存在默认依赖关系,这就是为什么当您尝试运行“标准”任务(如 do_build)时执行其他配方的原因。

    【讨论】:

      【解决方案2】:

      构建其他包是因为存在构建时间依赖项(fetch 任务不需要此类依赖项)。 build 任务的内容不相关,依赖项存储在其他地方(有关更多信息,请参阅BitBake User Manual and section Build Dependencies)。您可以在 bitbake 调用 (see the official docs) 中使用 -g 生成依赖关系图。

      如果要禁用默认依赖项,请检查documentation for the variable INHIBIT_DEFAULT_DEPS

      这不是你的问题的一部分,但我在你的食谱中看到了这些故障:

      • 您不必为标准任务添加addtask。您可以在documentation 中找到它们(连同文档)。
      • 如果你想跳过任务并保留依赖列表,你可以使用do_compile[noexec] = "1"
      • DISTRO 变量(即定义)属于全局配置。

      编辑:我没有回答为什么 build 没有回显,请参阅 Richard 的回答以获得解释。

      【讨论】:

        猜你喜欢
        • 2019-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多