Ekspansi Rekursif

Jangan gunakan ekspansi rekursif di makefile konfigurasi produk/papan. Ekspansi rekursif adalah penggunaan raw = alih-alih a := untuk penetapan variabel di 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 Starlark.

Menghapusnya sangat tergantung pada skenario spesifik tentang cara penggunaannya. Sebagian besar waktu itu melibatkan pemindahan tugas variabel ke tempat sebelum mereka 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 ditetapkan 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 dilakukan. Jika variabel disetel ke hasil pemanggilan fungsi yang mahal, fungsi hanya akan dipanggil sekali dengan ekspansi sederhana tetapi berpotensi berkali-kali dengan ekspansi rekursif.