6

我是“bitbake”方式的初学者,我想知道在构建包含数千个包的项目时,在以下情况下会发生什么:

  1. 您对完整图像(所有包)进行 bitbake 并成功完成。
  2. 您对包进行更改 - 一些源代码(我们称之为包“X”)
  3. 你再次 bitbake 完整的图像。

在第 3 步中是否重建了“X”?是否需要为要重建的“X”增加 PV 和 PR?依赖于“X”的“Y”包会发生什么?如果 X 被重建也是“Y”被重建?

我知道,如果您修改 .bb 文件,则不会构建依赖包,因为检查了时间戳。与源代码更改的机制相同吗?(顺便说一句,这是一个 QT 项目,所以最后 bitbake 运行 qmake->make 进行编译)

我正在使用 bitbake 1.13.2 版。

谢谢

4

2 回答 2

4

让我试着回答这个问题。例如,您有包 X、Y 和 Z。假设 X 依赖于 Y,Y 依赖于包 Z。

  1. 如果您正在执行“bitbake default-image-name”并且您正在构建从头开始(这意味着默认图像名称中所需的包之前都没有构建过)。所以 bitbake 现在创建一个依赖树(你可以通过“bitbake -g PACKAGE_NAME”看到依赖树。)。将构建第一个包 Z,然后构建 Y,最后构建包 X。

  2. 现在假设您在 X 源代码中进行了一些更改,并且您在不增加 X 配方文件 (x.bb) 中的 PR 编号的情况下执行“bitbake X”,bitbake 不会再次编译更改。我的意思是说 bitbake 只是检查包版本和修订版(PV 和 PR)。在这里,我们有相同的包版本 (PV) 和相同的包修订版 (PR),因此 bitbake 不会再次编译 X 包。

要在修改后编译包 X,您需要将更改应用为补丁。为此进行补丁更改(例如 change.diff 或 change.patch),在 X.bb 文件中添加条目(例如,参见其他配方文件)。之后增加 X.bb 中的 PR 编号。

现在“bitbake X”将再次构建 X 包。

  1. 在这里,当我们增加了 X 的 PR 时,只构建了 X 包。这里 bitbake 将检查已构建且具有相同 PR 编号的依赖包 Y 和 Z,它将仅使用已构建的 Y 和 Z 包。

  2. 如果我们重新构建了 Y 包(如果不想增加 PR 号,可以清理包 bitbake -c clean package_name),X 包默认不会重新构建,即使它依赖于 Y。

希望这有帮助。

于 2014-05-19T06:51:09.763 回答
0

Bitbake 依赖于另一个系统来编译,例如 make。make 有能力检测一个包是否需要重新编译。这就是 bitbake 处理重新编译包的方式。

于 2013-09-05T17:09:28.547 回答