No Make, uma instrução include
pode incluir caminhos de arquivo com variáveis e
ignora arquivos inexistentes quando prefixada com um sinal de menos. O equivalente da configuração
do produto é a função inherit-product-if-exists
. O Starlark usa instruções load
com arquivos identificados por literal de string. Se um arquivo não
existe, o Starlark gera um erro.
Para solucionar essa limitação, o conversor do Starlark:
- encontra todos os makefiles que podem corresponder ao caminho que envolve as variáveis;
- emite instruções
load
do Starlark para todos eles; - escolhe o correto no momento da execução.
Observe que o código Starlark gerado pode não parecer natural, já que lista todos os caminhos correspondentes, mesmo que apenas um seja executado.
Recomendamos remover as referências variáveis nas instruções
include
/inherit-product
.
Quando as referências não puderem ser evitadas, tente minimizar a parte variável. 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
o restringe a arquivos file.mk
em path/to
. Obviamente,
também remover o uso de TARGET_PRODUCT
seria ideal.