Incluir y heredar sentencias en Starlark

En make, una declaración de include puede incluir rutas de archivo con variables e ignorará los archivos inexistentes cuando tenga el prefijo menos. El equivalente de configuración del producto es la función inherit-product-if-exists . Starlark usa declaraciones de load con archivos identificados por cadena literal, y si un archivo no existe, Starlark genera un error.

Para evitar esta limitación, el convertidor Starlark:

  • encuentra todos los Makefiles que podrían coincidir con la ruta que involucra variables
  • emite declaraciones de load de Starlark para todos ellos
  • elige el correcto en tiempo de ejecución

Tenga en cuenta que el código Starlark generado puede parecer poco natural, ya que enumera todas las rutas coincidentes, aunque solo se ejecutará una.

Recomendamos eliminar las referencias a variables en las declaraciones include / inherit-product .

Cuando no se puedan evitar las referencias variables, intente minimizar la parte variable. Por ejemplo:

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

hace que el convertidor genere una declaración de load para cada file.mk en el árbol fuente, mientras que

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

lo restringe a archivos file.mk en path/to . Por supuesto, también sería ideal eliminar el uso de TARGET_PRODUCT .