Рекурсивное расширение

Не используйте рекурсивное расширение в make-файлах конфигурации продукта/платы. Рекурсивное расширение — это использование необработанного = вместо := для присвоения переменных в make-файлах. Это приводит к тому, что переменные, для которых заданы значения других переменных, не оценивают эти другие переменные до тех пор, пока они сами не будут оценены. Это функциональность, которую Starlark не поддерживает.

Его удаление во многом зависит от конкретного сценария его использования. В большинстве случаев это связано с перемещением назначений переменных туда, где они используются. Например, заменить:

MY_VAR_2 = foo
# Some stuff in between...
MY_VAR = $(MY_VAR_2)
MY_VAR_2 = bar
# $(MY_VAR) is bar here.

с участием:

MY_VAR_2 := foo
# Some stuff in between...
MY_VAR_2 := bar
MY_VAR := $(MY_VAR_2)
# $(MY_VAR) is bar here.

Добавление к переменной с помощью += использует рекурсивное расширение, если эта переменная ранее не была назначена с помощью простого расширения. Если вы не уверены, что переменная была назначена ранее, += можно заменить на MY_VAR := $(strip $(MY_VAR) new_value) .

Удаление отложенного расширения также может ускорить оценку файлов Makefile еще до того, как будет выполнено преобразование в Starlark. Если бы переменные были установлены в результате дорогостоящих вызовов функций, функция была бы вызвана только один раз с простым расширением, но потенциально много раз с рекурсивным расширением.