Em make, uma instrução include
pode incluir caminhos de arquivo com variáveis e ignorará arquivos inexistentes quando prefixado com um sinal de menos. O equivalente de configuração do produto é a função inherit-product-if-exists
. O Starlark usa instruções de load
com arquivos identificados por string literal e, se um arquivo não existir, o Starlark gera 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 de
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, mesmo que apenas um seja executado.
Recomendamos remover as referências de variáveis nas instruções include
/ inherit-product
.
Quando as referências de 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 de 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 também o uso de TARGET_PRODUCT
seria o ideal.