Bitbake 配方脚本中不同的分配类型意味着什么,例如:
BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}"
PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}"
MACHINE ??= "qemux86"
上面什么与 Ruby 类似bb_number_threads ||= 'something'
?
答案1
按照这Bitbake 手册的部分
?= 是:
您可以使用“?=”运算符来实现变量的“更软”赋值。这种类型的赋值允许您在解析语句时定义未定义的变量,但如果变量有值则保留该值。这是一个例子:
A ?= "aval"
如果在解析此语句时设置了 A,则该变量将保留其值。但是,如果未设置 A,则该变量将设置为“aval”。
?? = 是:
通过使用“??=”运算符,可以使用比上一节中“更弱”的赋值。此分配的行为与“?=”相同,只是分配是在解析过程结束时而不是立即进行的。因此,当存在多个“??=”赋值时,将使用最后一个。此外,任何“=”或“?=”赋值都将覆盖用“??=”设置的值。这是一个例子:
A ??= "somevalue"
A ??= "someothervalue"
如果在解析上述语句之前设置了 A,则该变量将保留其值。如果未设置 A,则该变量将设置为“someothervalue”。
同样,此分配是“惰性”或“弱”分配,因为它直到解析过程结束才发生。
答案2
简短明了的解释是:
IF A 之前未设置并且
A ?= aval A ?= difval
解析结束时, 的A
值为aval
。
简单规则?=
:将使用第一个设置值。
IF A 之前未设置并且
A ?= aval A ??= difval
或者
A = aval A ??= difval
解析结束时,A的值将保留aval
??=
关于:=
&?=
覆盖的简单规则??=
IF A 之前未设置并且
A ??= aval A ??= difval
解析结束时,A 的值将是difval
简单规则:将考虑??=
最后设置的值。??=