لا تحدد وظائف جعل جديدة في تكوين المنتج / اللوحة ، لسببين:
- إذا تم استخدام الوظيفة لاحقًا في ملف
Android.mk
، فلن يتم تحديدها بعد الآن عند تحويل تكوين المنتج إلى Starlark ، وقد لا يعمل ملفAndroid.mk
على النحو المنشود. - ينظر المحول Makefile إلى Starlark في ملف واحد فقط في كل مرة ، وغالبًا ما تكون تعريفات الوظائف في ملفات مختلفة عن التي يتم استدعاؤها.
في حين أن وظيفة make هي في الحقيقة مجرد متغير يتم تقييمه باستخدام وظيفة $(call)
المضمنة ، فإن محول Make to Starlark سيفترض أن أي متغير محدد باستخدام الكلمة الأساسية define
هو تعريف دالة ويرفضها. لذلك ستبدو الوظيفة كما يلي:
define my-func
Some text, arg1: $(1)
enddef
$(call my-func,foo)
نحن نقدم نصوصًا لاستبدال بعض الوظائف الشائعة تلقائيًا بالوظائف المحددة في نظام البناء الأساسي Makefiles. يمكن العثور عليها في build / bazel / mk2rbc .