Untuk tugas variabel di Make, saya melihat: = dan = operator. Apa perbedaan diantara mereka?
makefile
gnu-make
colon-equals
prosseek
sumber
sumber
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.sumber
make
tugas utama) memiliki overhead yang jauh lebih besar daripada penyelesaian variabel internal tersebut.Tugas sederhana
:=
Ekspresi tugas sederhana dievaluasi hanya sekali, pada kejadian pertama. Misalnya, jika
CC :=${GCC} ${FLAGS}
selama pertemuan pertama dievaluasigcc -W
maka setiap kali${CC}
terjadi akan diganti dengangcc -W
.Penugasan rekursif
=
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 variabelGCC
tersebut ditetapkan ulang yaituGCC=c++
maka variabel tersebut${CC}
akan diubah menjadic++ -W
setelah penugasan ulang.Penugasan bersyarat
?=
Penetapan bersyarat memberikan nilai ke variabel hanya jika tidak memiliki nilai
Menambahkan
+=
Asumsikan bahwa
CC = gcc
maka operator menambahkan digunakan sepertiCC += -w
itu
CC
sekarang memiliki nilaigcc -W
Untuk lebih lanjut, lihat tutorial ini
sumber
Dari http://www.gnu.org/software/make/manual/make.html#Flavours :
=
mendefinisikan variabel yang diperluas secara rekursif.:=
mendefinisikan variabel yang diperluas secara sederhana.sumber