Menyertakan dan mewarisi pernyataan di Starlark

Dalam pembuatan, pernyataan include dapat menyertakan jalur file dengan variabel dan akan mengabaikan file yang tidak ada saat diawali dengan minus. Persamaan konfigurasi produk adalah fungsi inherit-product-if-exists . Starlark menggunakan pernyataan load dengan file yang diidentifikasi dengan string literal, dan jika file tidak ada, Starlark akan membuat 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.

Kami merekomendasikan untuk menghapus referensi variabel dalam pernyataan include / inherit-product .

Ketika referensi variabel tidak dapat dihindari, cobalah untuk meminimalkan bagian variabel. Misalnya:

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

membatasi ke file file.mk di bawah path/to . Tentu saja, menghapus penggunaan TARGET_PRODUCT juga akan ideal.