不要在產品/電路板配置中定義新的 make 函數,原因有兩個:
- 如果稍後在
Android.mk
文件中使用該函數,則在產品配置轉換為 Starlark 時將不再定義該函數,Android.mk
文件可能無法按預期工作。 - Makefile 到 Starlark 的轉換器一次只查看一個文件,並且函數定義通常位於與調用它們的位置不同的文件中。
雖然 make 函數實際上只是一個使用內置$(call)
函數評估的變量,但 Make 到 Starlark 轉換器將假定使用define
關鍵字定義的任何變量都是函數定義並拒絕它。所以一個函數看起來像:
define my-func
Some text, arg1: $(1)
enddef
$(call my-func,foo)
我們提供腳本來自動將一些常用函數替換為核心構建系統 Makefile 中定義的函數。它們可以在build/bazel/mk2rbc 找到。