Expansão recursiva

Não use expansão recursiva em makefiles de configuração do produto/placa. A expansão recursiva é o uso de um raw = em vez de um := para atribuição de variáveis ​​em makefiles. Isso faz com que variáveis ​​definidas com o valor de outras variáveis ​​não avaliem essas outras variáveis ​​até que elas próprias sejam avaliadas. Esta é uma funcionalidade que o Starlark não suporta.

Removê-lo depende muito do cenário específico de como ele é usado. Na maioria das vezes, envolve mover atribuições de variáveis ​​para antes de onde elas são usadas. Por exemplo, substitua:

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

com:

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

Anexar a uma variável com += usa expansão recursiva se essa variável não tiver sido atribuída com expansão simples antes. Se você não tiver certeza se a variável foi atribuída antes, o += pode ser substituído por MY_VAR := $(strip $(MY_VAR) new_value) .

A remoção da expansão adiada também pode acelerar a avaliação dos Makefiles mesmo antes da conversão para Starlark ser concluída. Se as variáveis ​​fossem definidas para o resultado de chamadas de função caras, a função seria chamada apenas uma vez com expansão simples, mas potencialmente muitas vezes com expansão recursiva.