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的使用。