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