Makefile - คำสั่ง
มีคำสั่งมากมายในรูปแบบต่างๆ makeโปรแกรมบนระบบของคุณอาจไม่รองรับคำสั่งทั้งหมด ดังนั้นโปรดตรวจสอบว่าไฟล์make สนับสนุนคำสั่งที่เรากำลังอธิบายที่นี่ GNU make สนับสนุนคำสั่งเหล่านี้
คำสั่งเงื่อนไข
คำสั่งเงื่อนไขคือ -
ifeqคำสั่งเริ่มต้นเงื่อนไขและระบุเงื่อนไข ประกอบด้วยอาร์กิวเมนต์ 2 รายการคั่นด้วยเครื่องหมายจุลภาคและล้อมรอบด้วยวงเล็บ การแทนที่ตัวแปรจะดำเนินการกับอาร์กิวเมนต์ทั้งสองจากนั้นจึงเปรียบเทียบกัน บรรทัดของ makefile ที่ตามหลัง ifeq จะเป็นไปตามหากอาร์กิวเมนต์ทั้งสองตรงกัน มิฉะนั้นจะถูกละเว้น
ifneqคำสั่งเริ่มต้นเงื่อนไขและระบุเงื่อนไข ประกอบด้วยอาร์กิวเมนต์ 2 รายการคั่นด้วยเครื่องหมายจุลภาคและล้อมรอบด้วยวงเล็บ การแทนที่ตัวแปรจะดำเนินการกับอาร์กิวเมนต์ทั้งสองจากนั้นจึงเปรียบเทียบกัน บรรทัดของ makefile ตาม ifneq จะเป็นไปตามหากอาร์กิวเมนต์ทั้งสองไม่ตรงกัน มิฉะนั้นจะถูกละเว้น
ifdefคำสั่งเริ่มต้นเงื่อนไขและระบุเงื่อนไข ประกอบด้วยอาร์กิวเมนต์เดียว หากอาร์กิวเมนต์ที่กำหนดเป็นจริงเงื่อนไขจะกลายเป็นจริง
ifndefคำสั่งเริ่มต้นเงื่อนไขและระบุเงื่อนไข ประกอบด้วยอาร์กิวเมนต์เดียว หากอาร์กิวเมนต์ที่ระบุเป็นเท็จเงื่อนไขจะกลายเป็นจริง
elseคำสั่งทำให้บรรทัดต่อไปนี้ต้องปฏิบัติตามหากเงื่อนไขก่อนหน้านี้ล้มเหลว ในตัวอย่างด้านบนนี้หมายถึงคำสั่งการเชื่อมโยงทางเลือกที่สองถูกใช้เมื่อใดก็ตามที่ไม่ได้ใช้ทางเลือกแรก เป็นทางเลือกที่จะมีสิ่งอื่นในเงื่อนไข
endifคำสั่งสิ้นสุดเงื่อนไข ทุกเงื่อนไขต้องลงท้ายด้วย endif
ไวยากรณ์ของคำสั่งเงื่อนไข
ไวยากรณ์ของเงื่อนไขง่ายๆที่ไม่มีอื่นมีดังนี้ -
conditional-directive
text-if-true
endif
text-if-true อาจเป็นบรรทัดข้อความใดก็ได้เพื่อให้ถือว่าเป็นส่วนหนึ่งของ makefile หากเงื่อนไขเป็นจริง หากเงื่อนไขเป็นเท็จจะไม่มีการใช้ข้อความแทน
ไวยากรณ์ของเงื่อนไขที่ซับซ้อนมีดังนี้ -
conditional-directive
text-if-true
else
text-if-false
endif
ถ้าเงื่อนไขเป็นจริงจะใช้ text-if-true มิฉะนั้นจะใช้ text-if-false text-if-false สามารถเป็นข้อความกี่บรรทัดก็ได้
ไวยากรณ์ของคำสั่งเงื่อนไขจะเหมือนกันไม่ว่าเงื่อนไขจะง่ายหรือซับซ้อน มีสี่คำสั่งที่แตกต่างกันเพื่อทดสอบเงื่อนไขต่างๆ เป็นไปตามที่กำหนด -
ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"
คำสั่งตรงข้ามของเงื่อนไขข้างต้นมีดังนี้ -
ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"
ตัวอย่าง Conditionals Directives
libs_for_gcc = -lgnu
normal_libs =
foo: $(objects)
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
รวม Directive
include directive อนุญาต makeเพื่อระงับการอ่าน makefile ปัจจุบันและอ่าน makefiles อื่น ๆ ก่อนดำเนินการต่อ คำสั่งคือบรรทัดใน makefile ที่มีลักษณะดังนี้ -
include filenames...
ชื่อไฟล์สามารถมีรูปแบบชื่อไฟล์เชลล์ อนุญาตให้เว้นวรรคเพิ่มเติมและละเว้นที่จุดเริ่มต้นของบรรทัด แต่ไม่อนุญาตให้ใช้แท็บ ตัวอย่างเช่นหากคุณมีไฟล์ ".mk 'สามไฟล์คือ" a.mk', "b.mk 'และ` `c.mk' และ $ (bar) มันจะขยายเป็น bish bash จากนั้นต่อไปนี้ นิพจน์.
include foo *.mk $(bar)
is equivalent to:
include foo a.mk b.mk c.mk bish bash
เมื่อ makeประมวลผลคำสั่ง include ซึ่งจะระงับการอ่าน makefile และอ่านจากไฟล์ที่แสดงแต่ละไฟล์ เมื่อเสร็จแล้วmake กลับมาอ่าน makefile ที่คำสั่งปรากฏขึ้น
คำสั่งแทนที่
หากมีการตั้งค่าตัวแปรด้วยอาร์กิวเมนต์คำสั่งการกำหนดปกติใน makefile จะถูกละเว้น หากคุณต้องการตั้งค่าตัวแปรใน makefile แม้ว่าจะถูกตั้งค่าด้วยอาร์กิวเมนต์คำสั่งคุณสามารถใช้คำสั่งแทนที่ซึ่งเป็นบรรทัดที่มีลักษณะดังนี้
override variable = value
or
override variable := value