Em make, uma instrução include
pode incluir caminhos de arquivo com variáveis e irá ignorar arquivos inexistentes quando prefixados com um sinal de menos. O equivalente da configuração do produto é a função inherit-product-if-exists
. Starlark usa instruções load
com arquivos identificados por string literal e, se um arquivo não existir, Starlark lançará um erro.
Para contornar essa limitação, o conversor Starlark:
- encontra todos os Makefiles que podem corresponder ao caminho que envolve variáveis
- emite instruções
load
Starlark para todos eles - escolhe o correto em tempo de execução
Observe que o código Starlark gerado pode parecer artificial, pois lista todos os caminhos correspondentes, embora apenas um seja executado.
Recomendamos remover as referências de variáveis nas instruções include
/ inherit-product
.
Quando as referências a variáveis não puderem ser evitadas, tente minimizar a parte variável. Por exemplo:
MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk
faz com que o conversor gere uma instrução load
para cada file.mk
na árvore de origem, enquanto
include path/to/$(TARGET_PRODUCT)/file.mk
restringe-o a arquivos file.mk
em path/to
. Obviamente, remover o uso de TARGET_PRODUCT
também seria o ideal.