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

Fra*_*aut 5 embedded yocto bitbake

不同的赋值类型在 bitbake 配方脚本中意味着什么,例如:

 BB_NUMBER_THREADS  ?=  "${@oe.utils.cpu_count()}"
 PARALLEL_MAKE  ?=  "-j ${@oe.utils.cpu_count()}"
 MACHINE    ??= "qemux86"
Run Code Online (Sandbox Code Playgroud)

上面的什么类似于 Ruby 的bb_number_threads ||= 'something'

Fra*_*aut 10

根据Bitbake 手册的这一部分

?= 是:

您可以使用“?=”运算符为变量实现“更软”的赋值。这种类型的赋值允许您在解析语句时定义未定义的变量,但如果变量有值,则不考虑该值。下面是一个例子:

A ?= "aval"

如果在解析此语句时设置了 A,则变量将保留其值。但是,如果未设置 A,则将变量设置为“aval”。

??= 是:

通过使用“??=”运算符,可以使用比上一节中“弱”的赋值。此赋值的行为与“?=”相同,只是在解析过程结束时而不是立即进行赋值。因此,当存在多个“??=”赋值时,将使用最后一个。此外,任何“=”或“?=”赋值都将覆盖用“??=”设置的值。下面是一个例子:

 A ??= "somevalue"
 A ??= "someothervalue"
Run Code Online (Sandbox Code Playgroud)

如果在解析上述语句之前设置了 A,则变量保留其值。如果未设置 A,则将变量设置为“someothervalue”。

同样,这个赋值是一个“惰性”或“弱”赋值,因为它直到解析过程结束才会发生。