1.基礎語法
1.1 基礎變量設置
下面的例子將VARIABLE賦值爲"value"。當語句被解析時,賦值立刻生效。它是一種”硬(hard)“賦值。
VARIABLE = "value"
正如預期的,如果將前導(leading)或拖尾(trailing)空格包含在賦值中,這些空格會被保留。
VARIABLE = " value"
VARIABLE = "value "
將VARIABLE賦值爲”“,會將它設爲一個空字符串;但是將VARIABLE賦值爲 ” “,會將它設爲空格。
VARIABLE = ""
VARIABLE = " "
1.2 變量展開
Bitbake使用一種類似shell腳本的語法,支持變量引用另一個變量的內容。下面的例子展示了這一語法
A = "aval"
B = "pre${A}post"
A的當前值爲"aval",B的值爲"preavalpost"。但
要注意,在任意時刻,B的值都會依賴當時A的值。
1.3 設置默認值(?=)
可以使用”?=“對一個變量進行”軟(soft)“賦值。如果在該語句被解析時,變量還未被定義,那麼這種類型的賦值允許你定義一個變量;但是如果變量已經有值,那麼原值將會保留。例如
A ?= "aval"
如果在上述語句執行時,A已經被賦過值,那麼A保持之前的值;如果A沒有被賦過值,它將被賦值爲"aval"。
注意:這種類型的賦值也是立即生效的。也就是說,如果存在對一個變量的多次"?="賦值,只有第一次賦值有效。
1.4 設置弱(weak)默認值(??=)
可以使用”??=“運算符進行”更弱“的賦值。這種賦值除了在解析完成時纔會生效,其他與"?=“完全一致。也就是說,如果對同一變量存在多個”??=“賦值,最後一個有效。此外,任意”=“或”?=“類型的賦值會覆蓋”??=="類型的賦值。
例如
A ??= "somevalue"
A ??= "someothervalue"
如果A在上面的語句被解析前已經賦過值(這裏應該是??=以外類型的賦值吧?),那麼它保留之前的值;如果之前沒有被賦過值,A將被設爲"someothervalue"。
1.5 立即變量展開(:=)
":="操作符導致一個變量的內容被立即展開,而不是當它被實際使用時,例如
T = "123"
A := "${B} ${A} test ${T}"
T = "456"
B = "${T} bval"
C = "cval"
C := "${C}append"
A的值是”test 123“,因爲對A進行":="賦值的語句被解析時,${B} 和 ${A}都是未定義的。
1.6 帶有空格的向後追加(+=)和向前追加(=+)
”+=“和”=+“在當前值和新追加的值之間會插入一個空格。例如
B = "bval"
B += "additionaldata"
C = "cval"
C =+ "test"
B的值是"bval additionaldata",C的值是"test cval"。
1.7 不帶空格的向後追加(+=)和向前追加(=+)
”+=“和”=+“在當前值和新追加的值之間不會插入空格。例如
B = "bval"
B .= "additionaldata"
C = "cval"
C =. "test"
B的值是"bvaladditionaldata" ,C的值是"testcval".
1.8 向後追加和向前追加(覆蓋風格語法)
也可以使用覆蓋風格語法來對一個變量進行向後或向前追加,使用這種語法,在當前值和新追加的值之間不會插入空格,類似”.=“和”=.“。但它們與”.=“和”=.“的不同在於,它們在解析完成後纔會生效。
例如
B = "bval"
B_append = " additional data"
C = "cval"
C_prepend = "additional data "
D = "dval"
D_append = "additional data"
B變成 “bval additional data” ,C變成 “additional data cval”,D變成 “dvaladditional data”.