我使用 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"))
}
Run Code Online (Sandbox Code Playgroud)
我跑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 解析器在将本机配方放入“本机目录”之前已经扩展了变量。因此,我尝试更改SRC_URI获取任务期间的操作,并“加载”我的本机配方,如下所示:
python () {
d.appendVarFlag('do_parse', 'depends', 'my-recipe-native:do_populate_sysroot')
}
Run Code Online (Sandbox Code Playgroud)
在 中 …