Makefile สร้างhello
ปฏิบัติการหากใด ๆmain.cpp
, hello.cpp
, factorial.cpp
การเปลี่ยนแปลง Makefile ที่เล็กที่สุดที่เป็นไปได้เพื่อให้บรรลุข้อกำหนดนั้นอาจเป็นไปได้:
hello: main.cpp hello.cpp factorial.cpp
g++ -o hello main.cpp hello.cpp factorial.cpp
- pro: อ่านง่ายมาก
- con: การบำรุงรักษาฝันร้ายการทำซ้ำการอ้างอิง C ++
- ข้อเสีย: ปัญหาเรื่องประสิทธิภาพเราคอมไพล์ C ++ ใหม่อีกครั้งแม้ว่าจะมีการเปลี่ยนแปลงเพียงอันเดียว
ในการปรับปรุงข้างต้นเรารวบรวมเฉพาะไฟล์ C ++ ที่ถูกแก้ไข จากนั้นเราเพียงเชื่อมโยงไฟล์ออบเจ็กต์ผลลัพธ์เข้าด้วยกัน
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
main.o: main.cpp
g++ -c main.cpp
hello.o: hello.cpp
g++ -c hello.cpp
factorial.o: factorial.cpp
g++ -c factorial.cpp
- โปร: แก้ไขปัญหาประสิทธิภาพ
- con: ฝันร้ายการบำรุงรักษาใหม่พิมพ์ผิดที่มีศักยภาพในกฎไฟล์วัตถุ
เพื่อปรับปรุงในเรื่องนี้เราสามารถแทนที่กฎไฟล์อ็อบเจ็กต์ทั้งหมดด้วย.cpp.o
กฎเดียว:
OBJECTS=main.o hello.o factorial.o
hello: $(OBJECTS)
g++ -o hello $(OBJECTS)
.cpp.o:
g++ -c $< -o $@
- pro: กลับไปที่มี makefile สั้น ๆ ค่อนข้างง่ายต่อการอ่าน
ที่นี่มี.cpp.o
กฎกำหนดวิธีการที่จะสร้างจากanyfile.o
anyfile.cpp
$<
ตรงกับการพึ่งพาครั้งแรกในกรณีนี้ anyfile.cpp
$@
ตรงกับเป้าหมายในกรณีanyfile.o
นี้
การเปลี่ยนแปลงอื่น ๆ ที่มีอยู่ใน Makefile คือ:
- ทำให้การเปลี่ยนคอมไพเลอร์ง่ายขึ้นจาก g ++ เป็นคอมไพเลอร์ C ++
- ทำให้การเปลี่ยนตัวเลือกคอมไพเลอร์ง่ายขึ้น
- ทำให้การเปลี่ยนตัวเลือกลิงเกอร์ง่ายขึ้น
- ทำให้ง่ายต่อการเปลี่ยนไฟล์ต้นฉบับและเอาต์พุต C ++
- เพิ่มกฎเริ่มต้น 'ทั้งหมด' ซึ่งทำหน้าที่ตรวจสอบอย่างรวดเร็วเพื่อให้แน่ใจว่าไฟล์ต้นฉบับทั้งหมดของคุณมีอยู่ก่อนที่จะพยายามสร้างแอปพลิเคชันของคุณ