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
.