In make, un'istruzione include
può includere percorsi di file con variabili e ignorerà i file inesistenti se preceduta da un segno meno. L'equivalente della configurazione del prodotto è la funzione inherit-product-if-exists
. Starlark utilizza istruzioni load
con file identificati da una stringa letterale e, se un file non esiste, Starlark genera un errore.
Per aggirare questa limitazione, il convertitore Starlark:
- trova tutti i Makefile che potrebbero corrispondere al percorso che coinvolge le variabili
- emette istruzioni
load
Starlark per tutti loro - sceglie quello corretto in fase di esecuzione
Si noti che il codice Starlark generato potrebbe sembrare innaturale poiché elenca tutti i percorsi corrispondenti anche se ne verrà eseguito solo uno.
Si consiglia di rimuovere i riferimenti alle variabili nelle istruzioni include
/ inherit-product
.
Quando i riferimenti variabili non possono essere evitati, cerca di ridurre al minimo la parte variabile. Per esempio:
MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk
fa in modo che il convertitore generi un'istruzione load
per ogni file.mk
nell'albero dei sorgenti, mentre
include path/to/$(TARGET_PRODUCT)/file.mk
lo limita ai file file.mk
in path/to
. Ovviamente, l'ideale sarebbe rimuovere anche l'uso di TARGET_PRODUCT
.