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.