สร้างฟังก์ชั่น

อย่ากำหนดฟังก์ชัน make ใหม่ในการกำหนดค่าผลิตภัณฑ์/บอร์ด ด้วยเหตุผลสองประการ:

  1. หากใช้ฟังก์ชันนี้ในไฟล์ Android.mk ในภายหลัง จะไม่มีการกำหนดฟังก์ชันนั้นอีกต่อไปเมื่อแปลงการกำหนดค่าผลิตภัณฑ์เป็น Starlark และไฟล์ Android.mk อาจใช้งานไม่ได้ตามที่ต้องการ
  2. ตัวแปลง Makefile เป็น Starlark จะดูไฟล์ครั้งละหนึ่งไฟล์เท่านั้น และคำจำกัดความของฟังก์ชันมักจะอยู่ในไฟล์ที่แตกต่างกันมากกว่าที่เรียกใช้

แม้ว่าฟังก์ชัน make เป็นเพียงตัวแปรที่ได้ define การประเมินโดยใช้ฟังก์ชัน $(call) ในตัว แต่ตัวแปลง Make to Starlark จะถือว่าตัวแปรใดๆ ดังนั้นฟังก์ชั่นจะมีลักษณะดังนี้:

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

เรามีสคริปต์เพื่อแทนที่ฟังก์ชันทั่วไปบางอย่างโดยอัตโนมัติด้วยฟังก์ชันที่กำหนดไว้ใน Makefiles ของระบบบิลด์หลัก สามารถพบได้ที่ build/bazel/mk2rbc