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

时间:2013-06-28 14:24:48

标签: build command-line-arguments compiler-flags openembedded bitbake

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

由于我无法做到这一点,我正在寻找一些方法来为构建传递额外的标志。有没有办法将标志传递给bitbake构建类似gcc的-D选项?

即:

bitbake -Dfoo=bar oe-myimage

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

5 个答案:

答案 0 :(得分:15)

bitbake -Dfoo=bar oe-myimage
bitbake无法识别

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

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

export foo="foobar"

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

. oe-init-build-env
export foo="foobar"
export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE foo"      

将bitbake的变量'foo'列入白名单,从而使其在构建过程中对任何配方和子流程都可见。

在此之后你可以通过像 -

之类的表达式在bitbake中使用变量foo来调用任何bitbake操作
${foo}

答案 1 :(得分:4)

你可以这样做:

export foo="bar"
export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE foo"
bitbake oe-myimage

答案 2 :(得分:4)

虽然其他答案没有任何问题,但bitbake确实接受了--postread参数,如here所示。这意味着您可以根据需要为一些临时配置文件编写尽可能多的bitbake变量,并通过在命令行中指定文件名来在bitbake.conf之后读取它。例如:

bitbake --postread=./extra.conf

我个人认为这比处理环境变量更方便。

答案 3 :(得分:0)

不,我不相信存在这样的机制。但你可以做点什么

"echo "foo = \"bar\"" >local.conf

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

答案 4 :(得分:0)

还有一种方便的命令行方式来执行此操作,这在bitbake手册中使用BB_ORIGENV进行了描述:

  

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

为此,您可以按照建议的方式(从Python函数)读取变量:

 origenv = d.getVar("BB_ORIGENV", False)
 bar = origenv.getVar("BAR", False)

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

BAR=somevalue bitbake myimage