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

단순 규칙: ??=마지막으로 설정된 값이 고려됩니다.??=

관련 정보