Yocto - 为什么我不能覆盖构建任务?

时间:2021-06-13 23:41:09

标签: task yocto bitbake openembedded

我正在使用我自己的 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 似乎开始使用默认构建任务构建完全不同的配方而不是使用我在配方中定义的覆盖构建任务。

2 个答案:

答案 0 :(得分:3)

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

do_build[noexec] = "1

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

如其他答案中所述,存在默认依赖项,这就是当您尝试运行 do_build 等“标准”任务时执行其他配方的原因。

答案 1 :(得分:1)

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

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

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

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

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