In make kann eine include
-Anweisung Dateipfade mit Variablen einschließen und ignoriert nicht vorhandene Dateien, wenn ihnen ein Minus vorangestellt wird. Das Äquivalent zur Produktkonfiguration ist die Funktion inherit-product-if-exists
. Starlark verwendet load
für Dateien, die durch Zeichenfolgenliterale identifiziert werden. Wenn eine Datei nicht vorhanden ist, gibt Starlark einen Fehler aus.
Um diese Einschränkung zu umgehen, führt der Starlark-Konverter Folgendes aus:
- findet alle Makefiles, die mit dem Pfad übereinstimmen könnten, der Variablen beinhaltet
- gibt Starlark-
load
für alle aus - wählt zur Laufzeit die richtige aus
Beachten Sie, dass der generierte Starlark-Code möglicherweise unnatürlich aussieht, da er alle übereinstimmenden Pfade auflistet, obwohl nur einer ausgeführt wird.
Wir empfehlen, Variablenverweise in den Anweisungen include
/ inherit-product
zu entfernen.
Wenn Variablenverweise nicht vermieden werden können, versuchen Sie, den variablen Teil zu minimieren. Zum Beispiel:
MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk
bewirkt, dass der Konverter eine load
für jede file.mk
im Quellbaum generiert
include path/to/$(TARGET_PRODUCT)/file.mk
beschränkt es auf file.mk
Dateien unter path/to
. Natürlich wäre es ideal, auch die Verwendung von TARGET_PRODUCT
zu entfernen.