Dołącz i dziedzicź instrukcje w Starlark

W make instrukcja include może zawierać ścieżki plików ze zmiennymi i ignoruje nieistniejące pliki, jeśli poprzedzi się je znakiem minus. Odpowiednikiem konfiguracji produktu jest funkcja inherit-product-if-exists . Starlark używa instrukcji load z plikami identyfikowanymi przez literał łańcuchowy, a jeśli plik nie istnieje, Starlark zgłasza błąd.

Aby obejść to ograniczenie, konwerter Starlark:

  • znajduje wszystkie Makefile, które mogą pasować do ścieżki zawierającej zmienne
  • emituje instrukcje load Starlark dla nich wszystkich
  • wybiera właściwy w czasie wykonywania

Zauważ, że wygenerowany kod Starlark może wyglądać nienaturalnie, ponieważ zawiera listę wszystkich pasujących ścieżek, mimo że tylko jedna zostanie wykonana.

Zalecamy usunięcie odwołań do zmiennych w instrukcjach include / inherit-product .

Gdy nie można uniknąć odwołań do zmiennych, spróbuj zminimalizować część zmienną. Na przykład:

MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk

powoduje, że konwerter generuje instrukcję load dla każdego file.mk w drzewie źródłowym, podczas gdy

include path/to/$(TARGET_PRODUCT)/file.mk

ogranicza go do plików file.mk w path/to . Oczywiście idealne byłoby również usunięcie użycia TARGET_PRODUCT .