Bitbake基本语法

Bitbake脚本,就是bb,bbappend,bbclass,conf,还有inc文件。

编写这些脚本时的基本语法如下:

1,变量赋值

VARIABLE = "value"

或者

VARIABLE = ‘ I have a " in my value ’

可以对一个变量多次赋值。

2,行合并

使用反斜线来换行。

比如对FOO变量赋值:

FOO = “bar \

             baz \

              qaz”

3,变量扩展

A = “aval”

B = "pre${A}post"

B的值为“preavalpost”

如果扩展的变量不存在,则就是用原本字符串。比如:

BAR = “${FOO}”

如果FOO变量不存在,那BAR变量的值就是后面这个字符串。

在使用变量扩展时,每次引用这个变量时,再根据当前值进行扩展。比如:

A = "${B} baz"

B = "${C} bar"

C = "foo"

*At this point, ${A} equals "foo bar baz"*

C = "qux"

*At this point, ${A} equals "qux bar baz"*

B = "norf"

*At this point, ${A} equals "norf baz"\*

4,设置默认值

A ?= "aval"

如果在解析BB脚本时,A没有被定义或赋值,则使用上面的默认值。

注:对同一个变量多次设置默认值,只第一个有效。

5,设置弱默认值

A ??= "somevalue"

和普通的设置默认值不同,弱默认值优先级最低。

会在变量没有赋值和设置默认值时起作用,并且赋值发生在脚本解析完成前。

多个设置弱默认值,只有最后一个生效。

6,变量立即扩展

上面说到给某个变量赋值时可以使用变量扩展,扩展是在使用这个变量时才发生。

所以赋值变量的值随着扩展变量的值的变化而变化。

使用立即扩展,则会在当前立刻扩展变量值,并进行赋值,此后值就不会随扩展变量变化而变化。

T = "123"

A := "test ${T}"

T = "456"

这时A的值是“test 123”.

B := "123 ${C}"

C = "cval"

C := "${C}append"

B的值是“123 cval”,C的值是“cvalappend”。

因为使用立即扩展时,如果遇到未定义的变量,会暂时保留扩展操作。

7,Appending += 和 prepending =+

B = "bval"

B += "additionaldata"

C = "cval"

C =+ "test"

B的值是“bval additionaldata”,C的值是“test cval”。

注意有空格。

8,Appending .= 和 prepending =.

和上面一样,但没有空格。

9,Appending and Prepending (Override Style Syntax)

使用此方法来添加前缀或后缀,没有空格。

同上面的添加前后缀和立刻扩展赋值不同,此方法的赋值是在变量展开时才发生。

B = "bval"

B_append = " additional data"

C = "cval"

C_prepend = "additional data "

B的值是“bval additional data”, C的值是“additional data cval”。

10,删除某个值(Override Style Syntax)

当变量的值是空格分隔的一系列字符串时,可以指定删除一部分,原来的空格还会保留。

比如:

FOO = "123 456 789 123456 123 456 123 456"

FOO_remove = "123"

FOO_remove = "456"

FOO2 = " abc def ghi abcdef abc def abc def def"

FOO2_remove = "\    def \    abc \    ghi \    "

操作完成后,FOO的值是“ 789 123456 ”

FOO2的值是“ abcdef”

和“_append” , "_prepend"一样,"_remove"也是在变量展开式才生效。

11,Override Style Operation Advantage

考虑下面的情况,有一个foo.bbclass文件,里面要给一个变量加值:

foo.bbclass:

FOO += "val"

有一个recipe要使用这个bbclass文件:

inherit foo

FOO = "initial"

这时FOO的值就不是“initial val”,而是“initial”。

如果修改成_append:

FOO_append = " val"

则最终的值就是“initial val”。

12,Variable Flag Syntax

这个语法特性是BitBake为了给变量添加属性的一种特殊实现。

直接使用,不需要定义。比如:

FOO[a] = "abc"

FOO[b] = "123"

FOO[a] += "456"

变量FOO有两个flag,[a]和[b],值分别为"abc"和“abc 456”。

通常使用方式是给变量添加文档注释:

CACHE[doc] = "The directory holding the cache of the metadata."

13,嵌入Python变量扩展

比如调用func来给FOO赋值:

FOO = “${@func( )}”

举例:

DATE = "${@time.strftime('%Y%m%d',time.gmtime())}"

14,注销变量

使用unset关键字,从bitbake的内部字典移除某个变量。

unset VARIABLE

15,给路径赋值

注意不要使用“~”,并不会解析成home路径。

要提供全路径来赋值:

BBLAYERS ?= " \

                        /home/scott-lenovo/LayerA \

                       "

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值