【发布时间】:2020-04-04 16:46:15
【问题描述】:
我使用 Yocto,我想知道变量范围如何在 BitBake 配方中工作:
我的食谱如下:
SRC_URI += "file://something"
python do_fetch_prepend() {
d.appendVar("SRC_URI", "https://www.bla.com/resource.tar")
bb.error("SRC_URI_1: %s " % d.getVar("SRC_URI"))
d.setVar("TEST_VAR", "test")
}
python do_unpack_append() {
bb.error("SRC_URI_2: %s " % d.getVar("SRC_URI"))
bb.error("TEST_VAR: %s " % d.getVar("TEST_VAR"))
}
我运行 bitbake -v -c unpack myrecipe
SRC_URI_1 按预期打印:“file://something https://www.bla.com/resource.tar” SRC_URI_2 打印为:“file://something” TEST_VAR 打印为:无
我看起来像设置/更改数据存储 (d) 中的变量仅在 do_fetch 的范围内完成。这是预期的行为吗,因为我在文档中读到“d”是全局变量。
如果这是预期行为,是否可以更改配方任务中的全局变量?
问题背后的原因是我需要另一个本地配方才能将额外的 URI 添加到 SRC_URI。我首先尝试了内联 Python 变量扩展,但 BitBake 解析器在将原生配方放入“原生目录”之前已经扩展了变量。因此,我尝试在 fetch 任务期间更改 SRC_URI,并按如下方式“加载”我的本机配方:
python () {
d.appendVarFlag('do_parse', 'depends', 'my-recipe-native:do_populate_sysroot')
}
在 do_fetch_prepend 中,我使用了这个本机配方,它为我提供了正确的 URL,我想将其附加到 SRC_URI。因此,提取、拆包、清洁等工作正常进行。看起来我正在获取作品,但解包不是因为 SRC_URI 未更新。
【问题讨论】: