การใช้=
ทำให้ตัวแปรถูกกำหนดค่า หากตัวแปรมีค่าอยู่แล้วมันจะถูกแทนที่ ค่านี้จะถูกขยายเมื่อมีการใช้งาน ตัวอย่างเช่น:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
ใช้เป็นคล้ายกับการใช้:=
=
อย่างไรก็ตามแทนที่จะเป็นค่าที่ถูกขยายเมื่อใช้มันจะถูกขยายระหว่างการกำหนด ตัวอย่างเช่น:
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)
การใช้?=
กำหนดค่าตัวแปรถ้าไม่ได้กำหนดตัวแปรไว้ก่อนหน้านี้ ถ้าตัวแปรที่ถูกกำหนดไว้ก่อนหน้าค่าว่าง ( VAR=
) ก็ยังถือว่าเป็นชุดที่ผมคิดว่า มิฉะนั้นฟังก์ชั่นเหมือน=
กัน
การใช้+=
เป็นเหมือนการใช้=
แต่แทนที่จะแทนที่ค่าค่าจะถูกผนวกเข้ากับค่าปัจจุบันโดยมีช่องว่างอยู่ระหว่าง ถ้าตัวแปรถูกตั้งก่อนหน้านี้ด้วย:=
ก็จะขยายตัวผมคิดว่า มูลค่าส่งผลให้มีการขยายเมื่อมันถูกนำมาใช้ผมคิดว่า ตัวอย่างเช่น:
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
หากHELLO_WORLD = $(HELLO_WORLD) world!
มีการใช้บางสิ่งเช่นนี้การเรียกซ้ำจะเกิดขึ้นซึ่งน่าจะเป็นการสิ้นสุดการเรียกใช้ Makefile ของคุณ หากA := $(A) $(B)
มีการใช้งานผลลัพธ์จะไม่เหมือนกันทุกประการกับการใช้+=
เพราะB
ถูกขยายด้วย:=
แต่+=
จะไม่ทำให้เกิดB
การขยาย