在 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
的使用也是理想的。