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.
make
tugas 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 -W
maka 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.c
dijalankan. Namun, jika variabel GCC
tersebut ditetapkan ulang yaitu GCC=c++
maka variabel tersebut
${CC}
akan diubah menjadi c++ -W
setelah penugasan ulang.
?=
Penetapan bersyarat memberikan nilai ke variabel hanya jika tidak memiliki nilai
+=
Asumsikan bahwa CC = gcc
maka operator menambahkan digunakan seperti CC += -w
itu CC
sekarang 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.