Anweisungen in Starlark einbeziehen und erben

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.