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