แอพ“ make” รู้ถึงเป้าหมายเริ่มต้นที่จะสร้างได้อย่างไรหากไม่มีการระบุเป้าหมาย


188

แอพ linux ส่วนใหญ่รวบรวมด้วย:

make
make install clean

ตามที่ฉันเข้าใจแล้วใช้ชื่อของเป้าหมายการสร้างเป็นอาร์กิวเมนต์ ดังนั้นจึงinstallเป็นเป้าหมายที่คัดลอกไฟล์บางไฟล์และหลังจากนั้นcleanเป็นเป้าหมายที่ลบไฟล์ชั่วคราว

แต่เป้าหมายใดที่จะmakeสร้างหากไม่มีการระบุอาร์กิวเมนต์ (เช่นคำสั่งแรกในตัวอย่างของฉัน)

คำตอบ:


232

โดยค่าเริ่มต้นจะเริ่มต้นโดยการประมวลผลเป้าหมายแรกที่ไม่ได้เริ่มต้นด้วยการ.aka เป้าหมายเริ่มต้น ; ในการทำเช่นนั้นอาจต้องดำเนินการกับเป้าหมายอื่น ๆ โดยเฉพาะเป้าหมายแรกขึ้นอยู่กับ

GNU Make คู่มือการใช้งานครอบคลุมทุกสิ่งนี้และเป็นที่น่าแปลกใจที่ง่ายและข้อมูลการอ่าน


61
การเรียกเป้าหมายแรกallเป็นเพียงการประชุม
Tobu

1
มีประโยชน์ที่จะรันแยกต่างหากหากคุณกำลังติดตั้งสำหรับผู้ใช้รายอื่นเนื่องจากคุณจะต้องรันmake installใน sudo แทนการสร้างทั้งหมด
สกอตต์เวลส์

2
FYI รายการคนเริ่มต้นสำหรับการแต่งหน้าทำให้การพูดถึงสิ่งที่เกิดขึ้นเมื่อคุณไม่ได้ระบุเป้าหมายไม่มี ..
Sekm

2
ถ้า GNU ทำคู่มือครอบคลุมเนื้อหานี้ทำไมคำถามนี้ถาม คู่มือนี้ดีมากในการบันทึกวิธีเขียนกฎ แต่ไม่ต้องพูดถึงวิธีเขียน Makefile
นิค

1
ฉันกำลังมองหาที่ทำให้ไฟล์ที่includes Makefile %.o : %.cppอีกคนหนึ่งเป้าหมายแรกคือ ดังนั้นเป้าหมายเริ่มต้นคือ ... เพื่อสร้างไฟล์. cpp ทั้งหมดหรือไม่
Qwertie

178

เพื่อช่วยคนอื่น ๆ ในไม่กี่วินาทีและเพื่อช่วยพวกเขาในการอ่านคู่มือนี่เป็นคำตอบสั้น ๆ เพิ่มลงในไฟล์ด้านบนของคุณ:

.DEFAULT_GOAL := mytarget

mytarget จะเป็นเป้าหมายที่ถูกเรียกใช้ถ้า "make" ถูกดำเนินการและไม่มีการระบุเป้าหมาย

หากคุณมีรุ่นที่เก่ากว่า (<= 3.80) สิ่งนี้จะไม่ทำงาน หากเป็นกรณีนี้คุณสามารถทำสิ่งที่กล่าวถึงไม่ได้ง่ายๆเพียงเพิ่มสิ่งนี้ลงที่ด้านบนของไฟล์สร้างของคุณ:

.PHONY: default
default: mytarget ;

ข้อมูลอ้างอิง: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html


1
@nathan มันทำให้ mytarget เป็นเป้าหมายเริ่มต้นหากมีคนใช้ "ทำ" โดยไม่มีพารามิเตอร์ใด ๆ
ซามูเอล

1
โปรดทราบว่า. DEFAULT_GOAL ดูเหมือนจะไม่ได้รับการสนับสนุนใน GNU ทำ v3.80 และฉันจะถือว่ารุ่นก่อนหน้าเช่นกัน (v3.81 รองรับเช่นกัน) หากคุณใช้งานเวอร์ชันเก่ากว่านี้คุณจะต้องตรวจสอบให้แน่ใจว่าเป้าหมายเริ่มต้นของคุณคือเป้าหมายแรก / เป้าหมายสูงสุดในไฟล์สร้างของคุณ
ซามูเอล

4
"... เพื่อช่วยให้พวกเขาไม่ต้องอ่านคู่มือ" เป็นหนึ่งในประเด็นของ SO: คำตอบที่รวดเร็วสำหรับคำถามที่อาจใช้เวลาสักครู่ขุดหาเอกสารโบราณ
WattsInABox

1
"เพิ่มไฟล์นี้ไปยังด้านบนของไฟล์สร้างของคุณ": การเพิ่มไปยังด้านบนดูเหมือนจะไม่เป็นข้อกำหนด
Aman Deep Gautam

2
นี่ควรเป็นคำตอบที่ถูกต้อง ชัดเจนกว่าการชนะโดยนัยในกรณีนี้
Sion

34

GNU .DEFAULT_GOALยี่ห้อนอกจากนี้ยังช่วยให้คุณสามารถระบุเป้าหมายเริ่มต้นที่ทำให้ใช้ตัวแปรพิเศษที่เรียกว่า คุณสามารถยกเลิกการตั้งค่าตัวแปรนี้ที่อยู่ตรงกลางของ Makefile ทำให้เป้าหมายถัดไปในไฟล์กลายเป็นเป้าหมายเริ่มต้น

Ref: The Gnu Make manual - ตัวแปรพิเศษ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.