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

単純規則:??=最後に設定された値が考慮されます。??=

関連情報