bitbake/yocto 中 ?= 和 ??= 的含义

bitbake/yocto 中 ?= 和 ??= 的含义

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

简单规则:将考虑??=最后设置的值。??=

相关内容