Expansão recursiva

Não use expansão recursiva em makefiles de configuração de produto/placa. A expansão recursiva é o uso de raw = em vez de := para atribuição de variáveis ​​em makefiles. Isso faz com que as variáveis ​​que são 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 Starlark não oferece suporte.

Removê-lo depende muito do cenário específico de como é 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.

Acrescentar 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 tem 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 antes mesmo da conversão para Starlark ser concluída. Se as variáveis ​​fossem definidas como 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.