【问题标题】:Variable expansion in bitbake recipesbitbake 配方中的变量扩展
【发布时间】:2022-01-27 13:49:13
【问题描述】:

伙计们。

我一直在研究yocto构建过程,我注意到了以下结构的用法:

PN = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}"

我知道 ${} 表示变量扩展,grep 命令显示函数“vars_from_file”位于 bitbake/lib/bb/parse/__init__.py。

我想了解这个变量扩展是如何工作的,所以我研究了 bitbake 文件并发现:

  • oe-init-build-env 调用 oe-buildenv-internal,最后一个设置 PYTHONPATH 为 bitbake/lib。

  • 我推断 bitbake 使用 PYTHONPATH 来搜索函数 vars_from_file

我不明白的是:

  • 变量扩展中符号“@”的含义;
  • 如果bitbake使用PYTHONPATH搜索函数,为什么没有通过绝对路径${@bb.parse.__init__.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'} 而不是"${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}"
  • 这种类型的变量扩展是否仅适用于 bitbake?我搜索了gnu website,结构体开头没有“@”的应用。

谁能帮我理解它们?

【问题讨论】:

    标签: python linux bash yocto


    【解决方案1】:

    @ 符号用于位 bitbake 进行内联 python 变量扩展,它基本上表明您将调用一个函数并扩展其结果,在您的情况下通常将其分配给一个变量:

    PN = "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}"
    

    它将来自bitbake python模块解析的函数vars_from_file的结果分配给PN(包名),位于bitbake/lib/bb/parse/

    与任何其他 Python 模块一样,它会自动加载 init.py 并在导入时访问这些函数。

    这些函数的特别之处在于它们可以访问 bitbake 的数据字典,称为“d”。

    AFAIC 这是特定于 bitbake 的。

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2016-04-24
      相关资源
      最近更新 更多