สำหรับการกำหนดตัวแปรใน Make ฉันเห็นตัวดำเนินการ = และ = อะไรคือความแตกต่างระหว่างพวกเขา?
สำหรับการกำหนดตัวแปรใน Make ฉันเห็นตัวดำเนินการ = และ = อะไรคือความแตกต่างระหว่างพวกเขา?
คำตอบ:
นี้ได้อธิบายไว้ในเอกสารยี่ห้อ GNU ในหัวข้อ6.2 สองรสชาติของตัวแปร
ในระยะสั้นตัวแปรที่กำหนดด้วย:=
จะถูกขยายหนึ่งครั้ง แต่ตัวแปรที่กำหนดด้วย=
จะขยายเมื่อใดก็ตามที่มีการใช้
make
งานหลักของ) มีค่าโสหุ้ยที่ใหญ่กว่าการแก้ไขตัวแปรภายใน
:=
นิพจน์การมอบหมายงานอย่างง่ายจะได้รับการประเมินเพียงครั้งเดียวในเหตุการณ์แรก ตัวอย่างเช่นถ้าCC :=${GCC} ${FLAGS}
ในระหว่างการเผชิญหน้ากันครั้งแรกได้รับการประเมินไปgcc -W
แล้วในแต่ละครั้งที่เกิดขึ้นมันจะถูกแทนที่ด้วย${CC}
gcc -W
=
นิพจน์การกำหนดแบบวนซ้ำจะถูกประเมินทุกครั้งที่พบตัวแปรในโค้ด ยกตัวอย่างเช่นเช่นคำสั่งCC = ${GCC} {FLAGS}
จะถูกประเมินเฉพาะเมื่อมีการกระทำที่เหมือน${CC} file.c
จะถูกดำเนินการ อย่างไรก็ตามหากตัวแปรGCC
ถูกกำหนดใหม่เช่น
GCC=c++
นั้น${CC}
จะถูกแปลงเป็นc++ -W
หลังจากการกำหนดใหม่
?=
การกำหนดเงื่อนไขจะกำหนดค่าให้กับตัวแปรก็ต่อเมื่อไม่มีค่า
+=
สมมติว่าCC = gcc
แล้วผู้ประกอบการจะใช้ต่อท้ายเช่นCC += -w
นั้นCC
ขณะนี้มีค่าgcc -W
สำหรับข้อมูลเพิ่มเติมโปรดดูบทแนะนำเหล่านี้
จากhttp://www.gnu.org/software/make/manual/make.html#Flavors :
=
กำหนดตัวแปรที่ขยายซ้ำ :=
กำหนดตัวแปรที่ขยายอย่างง่าย