Includere ed ereditare istruzioni in Starlark

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 .