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 \
"