【发布时间】:2019-02-19 05:51:57
【问题描述】:
假设我有一个只添加一个脚本文件的简单配方:
LICENSE = "CLOSED"
SRC_URI += "file://test.sh"
S = "${WORKDIR}"
do_install () {
mkdir -p ${D}/usr/bin
cp -r test.sh ${D}/usr/bin
}
如果我修改 test.sh 并重新运行 bitbake,它什么也不做,因为它没有意识到任何改变。有没有办法让配方检查 SRC_URI 文件是否有变化?如果发现更改,则重新编译。本地文件不支持 SRC_URI[md5sum]。
编辑:由于我的测试设置有些不切实际,我最初的问题有点缺陷。但它确实在 bitbake 中展示了一个有趣的特性。
我在两个版本的 test.sh 之间切换,我只是在其中添加或删除了一个字符。事情是这样的:
- 运行 bitbake -> 测试配方已编译
- 通过添加一个字符来编辑 test.sh
- 运行 bitbake -> 测试配方已编译
- 通过删除字符编辑 test.sh
- 运行 bitbake -> 测试配方未编译
- 通过添加与以前相同的字符来编辑 test.sh
- 运行 bitbake -> 测试配方未编译
因此,如果 test.sh 更改为以前的版本,bitbake 不会注意到更改。一定有某种奇怪的缓存在某处发生。这意味着我最初使用的配方有效,但前提是对 test.sh 的更改是新的、实际的更改,而不是我用来测试配方的人为更改。
【问题讨论】:
-
你可以将 test.sh 存储在 git 存储库中吗?如果是这样,那么它会为您完成,因为 git checkout 哈希在更改时会导致重建。此外,您可以通过执行以下操作来构建... bitbake test-package bitbake image-name
-
我知道这个选项,但不幸的是在这种情况下使用 git 存储库不是一个选项。此外,仅运行“bitbake test-package”不会触发重建。我必须先运行“bitbake -c cleansstate test-package”。但我宁愿只运行“bitbake image-name”并自动重新编译所有带有更新文件的配方。这就是我在原始问题中寻找的内容。