Untuk tugas variabel di Make, saya melihat: = dan = operator. Apa perbedaan diantara mereka?
Untuk tugas variabel di Make, saya melihat: = dan = operator. Apa perbedaan diantara mereka?
Jawaban:
Ini dijelaskan dalam dokumentasi GNU Make, di bagian berjudul 6.2 Dua Rasa Variabel .
Singkatnya, variabel yang ditentukan dengan :=diperluas satu kali, tetapi variabel yang ditentukan dengan =diperluas setiap kali variabel tersebut digunakan.
maketugas utama) memiliki overhead yang jauh lebih besar daripada penyelesaian variabel internal tersebut.
:=Ekspresi tugas sederhana dievaluasi hanya sekali, pada kejadian pertama. Misalnya, jika CC :=${GCC} ${FLAGS}selama pertemuan pertama dievaluasi gcc -Wmaka setiap kali ${CC}terjadi akan diganti dengan gcc -W.
=Ekspresi tugas rekursif dievaluasi setiap kali variabel ditemukan dalam kode. Misalnya, pernyataan suka hanya CC = ${GCC} {FLAGS}akan dievaluasi ketika tindakan suka ${CC} file.cdijalankan. Namun, jika variabel GCCtersebut ditetapkan ulang yaitu GCC=c++maka variabel tersebut
${CC}akan diubah menjadi c++ -Wsetelah penugasan ulang.
?=Penetapan bersyarat memberikan nilai ke variabel hanya jika tidak memiliki nilai
+=Asumsikan bahwa CC = gccmaka operator menambahkan digunakan seperti CC += -w
itu CCsekarang memiliki nilaigcc -W
Untuk lebih lanjut, lihat tutorial ini
Dari http://www.gnu.org/software/make/manual/make.html#Flavours :
=mendefinisikan variabel yang diperluas secara rekursif. :=mendefinisikan variabel yang diperluas secara sederhana.