我正在玩我自己的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
所以如果我运行CCD_ 1;获取";正如我所期望的那样,这是有道理的。然而,当我运行bitbake -c build condtest
时,bitbake将不会回显"0";构建";而是开始获取和编译一堆包。更让我困惑的是,如果我将-e
标志添加到这两个命令中,它们的输出几乎相同,所以我不确定为什么bitbake似乎开始使用默认构建任务构建一个完全不同的配方,而不是使用我在配方中定义的覆盖构建任务。
基本bbclass文件(meta/classes/base.bbclass(集:
do_build[noexec] = "1
这意味着函数的内容没有被执行,它只是依赖关系图的占位符任务。这就是为什么您永远看不到构建任务的输出。
正如在其他答案中提到的,存在默认的依赖关系,这就是为什么当你尝试运行";标准";do_build之类的任务。
由于存在构建时依赖关系(fetch
任务不需要这样的依赖关系(,所以构建了其他包。build
任务的内容不相关,依赖关系存储在其他地方(有关更多信息,请参阅BitBake用户手册和构建依赖关系一节(。您可以在bitbake调用中使用-g
生成依赖关系图(请参阅官方文档(。
如果要禁用默认依赖项,请查看文档中的变量INHIBIT_default_DEPS。
这不是你问题的一部分,但我在你的食谱中看到了这些小故障:
- 您不必为标准任务添加
addtask
。您可以在文档中找到它们(以及文档( - 如果要跳过任务并保留依赖项列表,可以使用
do_compile[noexec] = "1"
DISTRO
变量(即定义(属于全局配置
编辑:我没有回答为什么bitbake -c fetch condtest
0没有得到回应,请参阅Richard的回答以了解解释。