تضمين البيانات ووراثتها في Starlark

في make ، يمكن أن تتضمن تعليمة include مسارات ملفات ذات متغيرات وتتجاهل الملفات غير الموجودة عندما تبدأ بعلامة الطرح. مكافئ تكوين المنتج هو وظيفة inherit-product-if-exists . يستخدم Starlark عبارات load مع الملفات المحددة بواسطة سلسلة حرفية ، وإذا كان الملف غير موجود ، فإن Starlark يلقي خطأ.

للتغلب على هذا القيد ، فإن محول Starlark:

  • يعثر على جميع ملفات Makefiles التي يمكن أن تتطابق مع المسار الذي يتضمن المتغيرات
  • ينبعث منها عبارات load Starlark لكل منهم
  • يختار الصحيح في وقت التشغيل

لاحظ أن كود Starlark الذي تم إنشاؤه قد يبدو غير طبيعي لأنه يسرد جميع المسارات المتطابقة على الرغم من أنه سيتم تنفيذ واحد فقط.

نوصي بإزالة المراجع المتغيرة في عبارات include / inherit-product .

عندما لا يمكن تجنب المراجع المتغيرة ، حاول تصغير الجزء المتغير. على سبيل المثال:

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

يتسبب المحول في إنشاء بيان load لكل file.mk في شجرة المصدر ، بينما

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

يقيده على ملفات file.mk تحت path/to . بالطبع ، ستكون إزالة استخدام TARGET_PRODUCT أيضًا أمرًا مثاليًا.