توابع بسازید

به دو دلیل، توابع ساخت جدید را در پیکربندی محصول/برد تعریف نکنید:

  1. اگر این تابع بعداً در یک فایل Android.mk استفاده شود، با تبدیل پیکربندی محصول به Starlark دیگر تعریف نمی‌شود و ممکن است فایل Android.mk آنطور که در نظر گرفته شده کار نکند.
  2. مبدل Makefile به Starlark فقط به یک فایل در یک زمان نگاه می کند، و تعاریف تابع اغلب در فایل های متفاوتی نسبت به جایی که فراخوانی شده اند وجود دارد.

در حالی که یک تابع make در واقع فقط یک متغیر است که با استفاده از تابع داخلی $(call) ارزیابی می شود، مبدل Make به Starlark هر متغیری را که با کلمه کلیدی define شده است، یک تعریف تابع فرض می کند و آن را رد می کند. بنابراین یک تابع به شکل زیر است:

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

ما اسکریپت هایی را ارائه می کنیم تا به طور خودکار برخی از توابع رایج را با مواردی که در Makefiles سیستم ساخت هسته تعریف شده اند جایگزین کنیم. آنها را می توان در build/bazel/mk2rbc پیدا کرد.