请勿在产品/开发板配置中定义新的 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。