สำหรับการกำหนดตัวแปรใน 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 :
=กำหนดตัวแปรที่ขยายซ้ำ :=กำหนดตัวแปรที่ขยายอย่างง่าย