اجعل الوظائف

لا تحدد وظائف جعل جديدة في تكوين المنتج / اللوحة ، لسببين:

  1. إذا تم استخدام الوظيفة لاحقًا في ملف Android.mk ، فلن يتم تحديدها بعد الآن عند تحويل تكوين المنتج إلى Starlark ، وقد لا يعمل ملف Android.mk على النحو المنشود.
  2. ينظر المحول Makefile إلى Starlark في ملف واحد فقط في كل مرة ، وغالبًا ما تكون تعريفات الوظائف في ملفات مختلفة عن التي يتم استدعاؤها.

في حين أن وظيفة make هي في الحقيقة مجرد متغير يتم تقييمه باستخدام وظيفة $(call) المضمنة ، فإن محول Make to Starlark سيفترض أن أي متغير محدد باستخدام الكلمة الأساسية define هو تعريف دالة ويرفضها. لذلك ستبدو الوظيفة كما يلي:

define my-func
  Some text, arg1: $(1)
enddef
$(call my-func,foo)

نحن نقدم نصوصًا لاستبدال بعض الوظائف الشائعة تلقائيًا بالوظائف المحددة في نظام البناء الأساسي Makefiles. يمكن العثور عليها في build / bazel / mk2rbc .