web-dev-qa-db-ja.com

bitbake / yoctoでの?=および?? =の意味

次のようなビットベイクレシピスクリプトでは、さまざまな割り当てタイプは何を意味しますか。

 BB_NUMBER_THREADS  ?=  "${@oe.utils.cpu_count()}"
 PARALLEL_MAKE  ?=  "-j ${@oe.utils.cpu_count()}"
 MACHINE    ??= "qemux86"

上記のどれがRubyのbb_number_threads ||= 'something'に類似していますか?

3

this Bitbakeマニュアルのセクションに従って

?= is:

「?=」演算子を使用して、変数の「よりソフトな」割り当てを実現できます。このタイプの割り当てでは、ステートメントの解析時に変数が未定義の場合は変数を定義できますが、変数に値がある場合は値をそのままにしておくことができます。次に例を示します。

A ?= "aval"

このステートメントの解析時にAが設定されている場合、変数はその値を保持します。ただし、Aが設定されていない場合、変数は「aval」に設定されます。

?? = is:

「?? =」演算子を使用すると、前のセクションよりも「弱い」割り当てを使用できます。この割り当ては「?=」と同じように動作しますが、割り当てが解析プロセスの直後ではなく最後に行われる点が異なります。したがって、複数の「?? =」割り当てが存在する場合は、最後の割り当てが使用されます。また、「=」または「?=」の割り当ては、「?? =」で設定された値を上書きします。次に例を示します。

 A ??= "somevalue"
 A ??= "someothervalue"

上記のステートメントが解析される前にAが設定されている場合、変数はその値を保持します。 Aが設定されていない場合、変数は「someothervalue」に設定されます。

繰り返しますが、この割り当ては、解析プロセスが終了するまで発生しないため、「遅延」または「弱い」割り当てです。

8

短くて鮮明な説明は次のようになります。

以前にAが設定されていない場合

A ?= aval A ?= difval

解析の最後に、Aの値はavalになります。

?=に関する簡単なルール:最初の設定値が使用されます。


以前にAが設定されていない場合

A ?= aval A ??= difval

OR

A = aval A ??= difval

解析の終了時に、Aの値はavalのままになります

??=に関する簡単なルール:=?=上書き??=


以前にAが設定されていない場合

A ??= aval A ??= difval

解析の最後に、Aの値はdifvalになります。

??=に関する簡単なルール:??=による最後の設定値が考慮されます。

0
divyesh