是否可以将命令行变量传递给bitbake构建?

Mik*_*ike 14 build compiler-flags command-line-arguments openembedded bitbake

我有一个使用bitbake的OpenEmbedded环境来做一些构建.我希望得到一些"交互式"的东西,bitbake会暂停并询问输入然后继续构建,但我发现这是不可能的.

因为我不能这样做,所以我正在寻找一些方法来为构建传递额外的标志.有没有办法将标志传递给bitbake构建类似gcc的-D选项?

即:

bitbake -Dfoo=bar oe-myimage
Run Code Online (Sandbox Code Playgroud)

因此在oe-myimage变量的构建过程foo中将设置为bar.

小智 17

bitbake -Dfoo=bar oe-myimage
Run Code Online (Sandbox Code Playgroud)

bitbake无法识别-D标志.因此,使用上述方法将无法正常工作.相反,您可以使用以下步骤从命令行指定标志 -

假设您要导出变量foo并期望它被bitbake识别.

export foo="foobar"
Run Code Online (Sandbox Code Playgroud)

在采购oe-init-build-env之后,您需要将其导出并通过BB_ENV_EXTRAWHITE变量通知bitbake.这意味着

. oe-init-build-env
export foo="foobar"
export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE foo"      
Run Code Online (Sandbox Code Playgroud)

这会将用于bitbake的变量'foo'列入白名单,从而使其在构建期间对任何配方和子进程可见.

在此之后,您可以通过以下表达式使用变量foo在bitbake中调用任何bitbake操作:

${foo}
Run Code Online (Sandbox Code Playgroud)


Tab*_*lly 10

虽然其他答案没有任何问题,但 bitbake 确实接受了此处--postread记录的论点。这意味着您可以将任意数量的 bitbake 变量写入一些临时配置文件,并通过在命令行上指定文件名在 bitbake.conf 之后读取它。例如:

bitbake --postread=./extra.conf
Run Code Online (Sandbox Code Playgroud)

我个人觉得这比处理环境变量更方便。


小智 6

你可以做:

export foo="bar"
export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE foo"
bitbake oe-myimage
Run Code Online (Sandbox Code Playgroud)


Bri*_*ian 6

还有一种方便的命令行方式可以做到这一点,在 bitbake 手册中使用BB_ORIGENV进行了描述

有时,能够从原始执行环境中获取信息很有用。Bitbake 将原始环境的副本保存到名为 BB_ORIGENV 的特殊变量中。

为此,您可以完全按照他们的建议(从 Python 函数)读取变量:

 origenv = d.getVar("BB_ORIGENV", False)
 bar = origenv.getVar("BAR", False)
Run Code Online (Sandbox Code Playgroud)

然后,从命令行传递它的方法很简单:

BAR=somevalue bitbake myimage
Run Code Online (Sandbox Code Playgroud)


cha*_*nan 2

不,我不相信这样的机制存在。但你可以做类似的事情

"echo "foo = \"bar\"" >local.conf
Run Code Online (Sandbox Code Playgroud)

不确定这是否能解决您的特定问题。此外,还有一种用于本地站点范围变量的机制:如果您的主目录中名为 .oe 的目录下有一个“site.conf”文件,bitbake 将读取该文件并将这些变量应用于每个构建的全局环境。也许这会有帮助?你没有具体说明你要解决什么问题,可能有更好的方法。