Dans make, une instruction include
peut inclure des chemins de fichiers avec des variables et ignorera les fichiers inexistants lorsqu'ils sont précédés d'un signe moins. L'équivalent de la configuration du produit est la fonction inherit-product-if-exists
. Starlark utilise des instructions load
avec des fichiers identifiés par un littéral de chaîne, et si un fichier n'existe pas, Starlark génère une erreur.
Pour contourner cette limitation, le convertisseur Starlark :
- trouve tous les Makefiles qui pourraient correspondre au chemin qui implique des variables
- émet des instructions
load
Starlark pour chacun d'eux - choisit le bon à l'exécution
Notez que le code Starlark généré peut sembler anormal car il répertorie tous les chemins correspondants même si un seul sera exécuté.
Nous vous recommandons de supprimer les références de variables dans les instructions include
/ inherit-product
.
Lorsque les références variables ne peuvent pas être évitées, essayez de minimiser la partie variable. Par exemple:
MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk
fait que le convertisseur génère une instruction load
pour chaque file.mk
dans l'arborescence source, alors que
include path/to/$(TARGET_PRODUCT)/file.mk
le limite aux fichiers file.mk
sous path/to
. Bien sûr, supprimer également l'utilisation de TARGET_PRODUCT
serait idéal.