Ekspansi rekursif

Jangan gunakan ekspansi rekursif dalam makefile konfigurasi produk/papan. Ekspansi rekursif adalah penggunaan raw = alih-alih a := untuk penugasan variabel dalam makefile. Ini menyebabkan variabel yang ditetapkan ke nilai variabel lain tidak mengevaluasi variabel lain tersebut sampai variabel itu sendiri dievaluasi. Ini adalah fungsi yang tidak didukung oleh Starlark.

Menghapusnya sangat bergantung pada skenario khusus tentang cara penggunaannya. Sebagian besar waktu melibatkan pemindahan penugasan variabel ke tempat sebelumnya digunakan. Misalnya, ganti:

MY_VAR_2 = foo
# Some stuff in between...
MY_VAR = $(MY_VAR_2)
MY_VAR_2 = bar
# $(MY_VAR) is bar here.

dengan:

MY_VAR_2 := foo
# Some stuff in between...
MY_VAR_2 := bar
MY_VAR := $(MY_VAR_2)
# $(MY_VAR) is bar here.

Menambahkan ke variabel dengan += menggunakan ekspansi rekursif jika variabel tersebut belum pernah ditugaskan dengan ekspansi sederhana sebelumnya. Jika Anda tidak yakin apakah variabel telah ditetapkan sebelumnya, += dapat diganti dengan MY_VAR := $(strip $(MY_VAR) new_value) .

Menghapus ekspansi yang ditangguhkan juga dapat mempercepat evaluasi Makefile bahkan sebelum konversi ke Starlark selesai. Jika variabel disetel ke hasil pemanggilan fungsi yang mahal, fungsi tersebut hanya akan dipanggil sekali dengan ekspansi sederhana tetapi berpotensi berkali-kali dengan ekspansi rekursif.