Dalam make, pernyataan include
dapat menyertakan jalur file dengan variabel dan akan mengabaikan file yang tidak ada saat diawali dengan tanda minus. Setara konfigurasi produk adalah fungsi inherit-product-if-exists
. Starlark menggunakan pernyataan load
dengan file yang diidentifikasi oleh string literal, dan jika file tidak ada, Starlark melempar kesalahan.
Untuk mengatasi batasan ini, konverter Starlark:
- menemukan semua Makefile yang cocok dengan jalur yang melibatkan variabel
- memancarkan pernyataan
load
Starlark untuk semuanya - memilih yang benar saat runtime
Perhatikan bahwa kode Starlark yang dihasilkan mungkin terlihat tidak wajar karena mencantumkan semua jalur yang cocok meskipun hanya satu yang akan dieksekusi.
Sebaiknya hapus referensi variabel dalam pernyataan include
/ inherit-product
.
Ketika referensi variabel tidak dapat dihindari, cobalah untuk meminimalkan bagian variabel. Sebagai contoh:
MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk
menyebabkan konverter menghasilkan pernyataan load
untuk setiap file.mk
di pohon sumber, sedangkan
include path/to/$(TARGET_PRODUCT)/file.mk
membatasinya ke file file.mk
di bawah path/to
. Tentu saja, menghapus penggunaan TARGET_PRODUCT
juga ideal.