Bitbake語法

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”.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章