在 Starlark 中包含和继承语句

在 make 中, include语句可以包含带有变量的文件路径,并且在以减号为前缀时将忽略不存在的文件。产品配置等价物是inherit-product-if-exists函数。 Starlark 对由字符串文字标识的文件使用load语句,如果文件不存在,Starlark 会抛出错误。

要解决此限制,Starlark 转换器:

  • 查找所有可以匹配包含变量的路径的 Makefile
  • 为所有这些发出 Starlark load语句
  • 在运行时选择正确的

请注意,生成的 Starlark 代码可能看起来不自然,因为它列出了所有匹配的路径,即使只有一个会被执行。

我们建议在include / inherit-product语句中删除变量引用。

当变量引用无法避免时,尽量减少变量部分。例如:

MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk

导致转换器为源树中的每个file.mk生成一个load语句,而

include path/to/$(TARGET_PRODUCT)/file.mk

将其限制为path/to下的file.mk文件。当然,删除TARGET_PRODUCT的使用也是理想的。