Menggunakan =
menyebabkan variabel diberi nilai. Jika variabel sudah memiliki nilai, itu diganti. Nilai ini akan diperluas saat digunakan. Sebagai contoh:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
Menggunakan :=
mirip dengan menggunakan =
. Namun, alih-alih nilai diperluas ketika digunakan, itu diperluas selama penugasan. Sebagai contoh:
HELLO = world
HELLO_WORLD := $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# Still echoes "world world!"
echo $(HELLO_WORLD)
HELLO_WORLD := $(HELLO) world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
Menggunakan ?=
memberikan nilai variabel jika variabel sebelumnya tidak ditugaskan. Jika variabel sebelumnya diberi nilai kosong ( VAR=
), itu masih dianggap set saya pikir . Kalau tidak, fungsinya persis seperti =
.
Menggunakan +=
seperti menggunakan =
, tetapi alih-alih mengganti nilai, nilai ditambahkan ke nilai saat ini, dengan spasi di antaranya. Jika variabel sebelumnya diatur dengan :=
, saya pikir diperluas . Nilai yang dihasilkan diperluas ketika digunakan saya pikir . Sebagai contoh:
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
Jika sesuatu seperti HELLO_WORLD = $(HELLO_WORLD) world!
digunakan, rekursi akan terjadi, yang kemungkinan besar akan mengakhiri eksekusi Makefile Anda. Jika A := $(A) $(B)
digunakan, hasilnya tidak akan sama persis dengan menggunakan +=
karena B
diperluas dengan :=
sedangkan +=
tidak akan menyebabkan B
diperluas.