Não use a expansão recursiva (link em inglês)
em makefiles de configuração de produto/placa. A expansão recursiva é o uso de um =
bruto
em vez de um :=
para atribuição de variáveis em makefiles. Isso faz com que as variáveis
definidas com o valor de outras só avaliem essas outras
variáveis após elas próprias serem avaliadas. Essa é uma funcionalidade que
não oferece suporte ao Starlark.
A remoção desse código depende muito da maneira como ele é usado. Na maioria das vezes, envolve mover atribuições de variáveis para uma posição anterior à posição em que as variáveis 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.
por:
MY_VAR_2 := foo
# Some stuff in between...
MY_VAR_2 := bar
MY_VAR := $(MY_VAR_2)
# $(MY_VAR) is bar here.
Anexar uma variável com +=
usa a 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)
.
Remover a expansão adiada também pode acelerar a avaliação dos Makefiles mesmo antes da conclusão da conversão para o Starlark. Se as variáveis fossem definidas como o resultado de chamadas de funções caras, uma função só seria chamada uma vez com expansão simples, mas poderia ser chamada muitas vezes com expansão recursiva.