في 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
أيضًا أمرًا مثاليًا.