ฉันอ่านบทแนะนำเกี่ยวกับ Makefiles แต่สำหรับฉันแล้วยังไม่ชัดเจนว่าเป้าหมาย "ทั้งหมด" หมายถึงอะไรและทำหน้าที่อะไร
ความคิดใด ๆ ?
ฉันอ่านบทแนะนำเกี่ยวกับ Makefiles แต่สำหรับฉันแล้วยังไม่ชัดเจนว่าเป้าหมาย "ทั้งหมด" หมายถึงอะไรและทำหน้าที่อะไร
ความคิดใด ๆ ?
คำตอบ:
บิลด์ดังที่ Makefile เข้าใจประกอบด้วยเป้าหมายจำนวนมาก ตัวอย่างเช่นในการสร้างโครงการคุณอาจต้องใช้
หากคุณใช้เวิร์กโฟลว์นี้กับ makefile คุณสามารถสร้างแต่ละเป้าหมายแยกกันได้ ตัวอย่างเช่นถ้าคุณเขียน
make file1.o
มันจะสร้างไฟล์นั้นถ้าจำเป็นเท่านั้น
ชื่อของall
ไม่ได้รับการแก้ไข เป็นเพียงชื่อธรรมดา all
หมายถึงเป้าหมายที่ถ้าคุณเรียกมันให้จะสร้างทุกสิ่งที่จำเป็นเพื่อให้สมบูรณ์สร้าง โดยปกติจะเป็นเป้าหมายจำลองซึ่งไม่ได้สร้างไฟล์ใด ๆ แต่ขึ้นอยู่กับไฟล์อื่น ๆ เท่านั้น ตัวอย่างข้างต้นการสร้างสิ่งที่จำเป็นทั้งหมดคือการสร้างไฟล์ปฏิบัติการไฟล์อื่น ๆ ที่ถูกดึงเข้ามาเป็นการอ้างอิง ดังนั้นใน makefile จะมีลักษณะดังนี้:
all: executable1 executable2
all
โดยปกติเป้าหมายจะเป็นเป้าหมายแรกใน makefile เนื่องจากหากคุณเพียงแค่เขียนmake
ในบรรทัดคำสั่งโดยไม่ระบุเป้าหมายเป้าหมายจะสร้างเป้าหมายแรก all
และคุณคาดหวังให้เป็น
คู่มือสำหรับ GNU Make ให้คำนิยามที่ชัดเจนสำหรับall
ในของรายการเป้าหมายมาตรฐาน
หากผู้เขียน Makefile ปฏิบัติตามหลักการนั้นเป้าหมายall
ควร:
make
ควรทำเช่นเดียวกับmake all
.all
โดยทั่วไปเพื่อให้บรรลุ 1 จะถูกกำหนดให้เป็น.PHONY
เป้าหมายที่ขึ้นอยู่กับปฏิบัติการที่สร้างโปรแกรมทั้งหมด:
.PHONY : all
all : executable
เพื่อให้บรรลุ 2 all
ควรเป็นเป้าหมายแรกที่กำหนดในไฟล์ make หรือกำหนดให้เป็นเป้าหมายเริ่มต้น:
.DEFAULT_GOAL := all
ไม่แน่ใจว่าย่อมาจากอะไรพิเศษ เป็นเพียงแบบแผนที่คุณระบุกฎ 'ทั้งหมด' และโดยทั่วไปจะใช้เพื่อแสดงรายการเป้าหมายย่อยทั้งหมดที่จำเป็นในการสร้างโครงการทั้งหมดดังนั้นจึงเรียกว่า 'ทั้งหมด' สิ่งเดียวที่พิเศษเกี่ยวกับเรื่องนี้ก็คือบ่อยครั้งที่ผู้คนมักจะใส่เป้าหมายนี้เป็นเป้าหมายแรกใน makefile ซึ่งหมายความว่าเพียงแค่พิมพ์ "make" เพียงอย่างเดียวก็จะเหมือนกับ "make all"
เป้าหมาย "ทั้งหมด" เป็นตัวอย่างของเป้าหมายจำลอง - ไม่มีสิ่งใดในดิสก์ที่เรียกว่า "ทั้งหมด" ซึ่งหมายความว่าเมื่อคุณทำการ "สร้างทั้งหมด" ให้คิดเสมอว่าจำเป็นต้องสร้างมันและรันคำสั่งทั้งหมดสำหรับเป้าหมายนั้น โดยทั่วไปคำสั่งเหล่านั้นจะเป็นคำสั่งที่สร้าง end-products ทั้งหมดที่ makefile รู้ แต่มันสามารถทำอะไรก็ได้
ตัวอย่างอื่น ๆ ของเป้าหมายจำลองคือ "สะอาด" และ "ติดตั้ง" และทำงานในลักษณะเดียวกัน
หากคุณยังไม่ได้อ่านคุณควรอ่านGNU Make Manualซึ่งเป็นบทช่วยสอนที่ยอดเยี่ยมเช่นกัน