Make - Linux Command - คำสั่ง Unix

make - GNU ทำให้ยูทิลิตีรักษากลุ่มของโปรแกรม

สรุป

make [ -ef makefile ] [option] ... target ...

การเตือน

หน้านี้เป็นสารสกัดจากเอกสารประกอบของ GNU make มีการปรับปรุงเป็นครั้งคราวเนื่องจากโครงการ GNU ไม่ได้ใช้ nroff สำหรับเอกสารฉบับสมบูรณ์ฉบับสมบูรณ์โปรดดูที่ไฟล์ข้อมูล make.info ซึ่งทำจากไฟล์ต้นฉบับของ Texinfo make.texinfo

ลักษณะ

วัตถุประสงค์ของยูทิลิตี make คือการกำหนดว่าชิ้นส่วนใดของโปรแกรมขนาดใหญ่ต้องเรียบเรียงใหม่โดยอัตโนมัติและออก คำสั่ง ให้คอมไพล์ใหม่ คู่มืออธิบายการใช้ GNU ของ make ซึ่งเขียนขึ้นโดย Richard Stallman และ Roland McGrath ตัวอย่างของเราแสดงโปรแกรม C เนื่องจากเป็นภาษาที่พบมากที่สุด แต่คุณสามารถใช้ make กับภาษาเขียนโปรแกรมใด ๆ ที่คอมไพเลอร์สามารถทำงานได้โดยใช้คำสั่งเชลล์ ในความเป็นจริง ให้ ไม่ จำกัด เฉพาะโปรแกรม คุณสามารถใช้เพื่ออธิบายงานใด ๆ ที่ต้องมีการอัปเดตไฟล์โดยอัตโนมัติจากผู้อื่นเมื่อมีการเปลี่ยนแปลงอื่น ๆ

ในการเตรียมใช้ make คุณต้องเขียนไฟล์ที่เรียกว่า makefile ซึ่งอธิบายความสัมพันธ์ระหว่างไฟล์ในโปรแกรมของคุณและระบุคำสั่งสำหรับการอัพเดตแต่ละไฟล์ ในโปรแกรมมักจะมีการปรับปรุงไฟล์ปฏิบัติการจากไฟล์อ็อบเจกต์ซึ่งจะทำโดยรวบรวมไฟล์ต้นฉบับ

เมื่อ makefile ที่เหมาะสมมีอยู่ทุกครั้งที่คุณเปลี่ยนไฟล์ต้นทางคำสั่งเชลล์แบบง่ายๆนี้:

ทำ

พอเพียงเพื่อทำซ้ำที่จำเป็นทั้งหมด โปรแกรม make ใช้ฐานข้อมูล makefile และเวลาในการแก้ไขครั้งสุดท้ายของไฟล์เพื่อตัดสินใจว่าต้องการอัปเดตไฟล์ใด สำหรับแต่ละไฟล์จะออกคำสั่งที่บันทึกไว้ในฐานข้อมูล

make execute คำสั่งใน makefile เพื่ออัพเดต ชื่อ เป้าหมายอย่างน้อยหนึ่งรายการโดยที่ ชื่อ มักเป็นโปรแกรม ถ้าไม่มีตัวเลือก -f อยู่ ให้ทำการ ค้นหา makefiles GNUmakefile , makefile และ Makefile ตามลำดับดังกล่าว

โดยปกติคุณควรเรียก makefile ของคุณ makefile หรือ Makefile (ขอแนะนำ Makefile เนื่องจากปรากฏเด่นชัดอยู่ใกล้กับจุดเริ่มต้นของรายชื่อไดเรกทอรีใกล้กับไฟล์สำคัญอื่น ๆ เช่น README ) ไม่แนะนำให้ใช้ชื่อแรกที่ตรวจสอบ GNUmakefile สำหรับ makefiles ส่วนใหญ่ คุณควรใช้ชื่อนี้หากคุณมี makefile เฉพาะสำหรับ GNU make และจะไม่เข้าใจเวอร์ชันอื่น ๆ ถ้า makefile เป็น `- 'อ่านมาตรฐานจะอ่าน

อัปเดตเป้าหมายหากขึ้นอยู่กับไฟล์เบื้องต้นที่ได้รับการแก้ไขเนื่องจากเป้าหมายถูกแก้ไขครั้งล่าสุดหรือหากเป้าหมายไม่มีอยู่

ตัวเลือก

-b

-m

ตัวเลือกเหล่านี้จะถูกละเว้นสำหรับความเข้ากันได้กับรุ่นอื่น ๆ ของ make

-Cdir

เปลี่ยนเป็น directory dir ก่อนอ่าน makefiles หรือทำอะไรอื่น ถ้ามีการระบุตัวเลือกหลาย C แต่ละค่าจะถูกตีความเมื่อเทียบกับค่าก่อนหน้านี้: -C / -C ฯลฯ เทียบเท่ากับ -C / etc โดยทั่วไปจะใช้กับการเรียกซ้ำแบบทวนซ้ำของ make

-d

พิมพ์ข้อมูลการแก้จุดบกพร่องนอกเหนือจากการประมวลผลตามปกติ ข้อมูลการดีบักจะระบุว่าไฟล์ใดกำลังได้รับการพิจารณาสำหรับการสร้างใหม่ซึ่งไฟล์กำลังมีการเปรียบเทียบและมีผลลัพธ์อะไรบ้างซึ่งไฟล์เหล่านี้จะต้องมีการสร้างใหม่ซึ่งกฎข้อสรุปจะได้รับการพิจารณาและมีการนำไปใช้ทุกอย่างที่น่าสนใจเกี่ยวกับการตัดสินใจ จะทำอย่างไร

-e

ให้ตัวแปรที่นำมาจากสภาพแวดล้อมสำคัญกว่าตัวแปรจาก makefiles

-f ไฟล์

ใช้ ไฟล์ เป็น makefile

-ผม

ละเว้นข้อผิดพลาดทั้งหมดในคำสั่งที่เรียกใช้เพื่อสร้างไฟล์ใหม่

- ฉัน ผบ

ระบุไดเรกทอรีไดเร็กทอรีเพื่อค้นหา makefiles รวม ถ้ามีการใช้ตัวเลือก -I หลายตัวเพื่อระบุไดเร็กทอรีหลายไดเรกทอรีจะค้นหาตามลำดับที่ระบุ ซึ่งแตกต่างจากอาร์กิวเมนต์กับ flags อื่นของ make ไดเรกทอรีที่ให้มากับ -I flag อาจมาโดยตรงที่ธง: -I dir ได้รับอนุญาตเช่นเดียวกับ -I dir ไวยากรณ์นี้ได้รับอนุญาตให้เข้ากันได้กับ C-preprocessor ของ C

-j งาน

ระบุจำนวนงาน (คำสั่ง) ที่จะทำงานพร้อมกัน ถ้ามีมากกว่าหนึ่งตัวเลือก -j ตัวสุดท้ายมีผล ถ้าตัวเลือก -j ถูกกำหนดโดยไม่มีอาร์กิวเมนต์ ให้กำหนด จะไม่ จำกัด จำนวนงานที่สามารถทำงานพร้อมกันได้

-k

ดำเนินต่อไปให้มากที่สุดเท่าที่จะเป็นไปได้หลังจากข้อผิดพลาด แม้ว่าเป้าหมายที่ล้มเหลวและกลุ่มที่พึ่งพาได้ไม่สามารถทำใหม่ได้การพึ่งพาเป้าหมายอื่น ๆ ของเป้าหมายเหล่านี้สามารถประมวลผลได้ทั้งหมด

-l

โหลด -l

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

-n

พิมพ์คำสั่งที่จะดำเนินการ แต่ไม่ได้ดำเนินการ

-o ไฟล์

อย่าสร้างไฟล์ ใหม่ แม้ว่าจะเก่ากว่าการอ้างอิงและอย่าทำอะไรใหม่เนื่องจากมีการเปลี่ยนแปลง ไฟล์ โดยทั่วไปไฟล์จะถือว่าเก่ามากและกฎจะถูกละเลย

-p

พิมพ์ฐานข้อมูล (กฎและค่าตัวแปร) ที่เป็นผลมาจากการอ่าน makefiles; จากนั้นดำเนินการตามปกติหรือที่ระบุไว้เป็นอย่างอื่น นอกจากนี้ยังพิมพ์ข้อมูลเวอร์ชันที่กำหนดโดยสวิตช์ -v (ดูด้านล่าง) หากต้องการพิมพ์ฐานข้อมูลโดยไม่พยายามสร้างไฟล์ใด ๆ ให้ใช้ make -p -f / dev / null

-q

`` โหมดคำถาม '' อย่าใช้คำสั่งหรือพิมพ์อะไร เพียงแค่ส่งกลับสถานะการออกซึ่งเป็นศูนย์หากเป้าหมายที่ระบุมีการอัปเดตอยู่แล้วซึ่งไม่ใช่ศูนย์

-r

กำจัดการใช้กฎที่มีอยู่ในตัว นอกจากนี้ให้ล้างรายการดีฟอลต์ของคำต่อท้ายสำหรับกฎต่อท้าย

-s

การทำงานเงียบ; ไม่พิมพ์คำสั่งตามที่กำหนด

-S

ยกเลิกผลของตัวเลือก -k นี่ไม่ใช่สิ่งที่จำเป็นยกเว้นใน recursive ทำให้ ที่ -k อาจสืบทอดมาจาก make -top ระดับผ่าน MAKEFLAGS หรือถ้าคุณตั้งค่า -k ใน MAKEFLAGS ในสภาพแวดล้อมของคุณ

t-

แตะไฟล์ (ทำเครื่องหมายให้ทันสมัยโดยไม่ต้องมีการเปลี่ยนแปลงจริงๆ) แทนการเรียกใช้คำสั่งของตน นี้จะใช้เพื่อหลอกว่าคำสั่งได้ทำเพื่อหลอกลวง invocations อนาคตของการ ทำ

-v

พิมพ์เวอร์ชันของโปรแกรมการผลิตพร้อมลิขสิทธิ์รายการผู้เขียนและแจ้งให้ทราบว่าไม่มีการรับประกันใด ๆ

-w

พิมพ์ข้อความที่มีไดเร็กทอรีทำงานก่อนและหลังการประมวลผลอื่น ๆ นี้อาจเป็นประโยชน์สำหรับการติดตามข้อผิดพลาดจากรังที่ซับซ้อนของ recursive ทำ คำสั่ง

ไฟล์ -W

แกล้งทำเป็นว่า ไฟล์ เป้าหมายได้รับการแก้ไขแล้ว เมื่อใช้กับ n- ธงนี้จะแสดงให้คุณเห็นสิ่งที่จะเกิดขึ้นถ้าคุณกำลังจะแก้ไขไฟล์ที่ ถ้าไม่มี -n ก็เกือบจะเหมือนกันกับการเรียกใช้คำสั่ง touch ในไฟล์ที่กำหนดก่อนที่จะรัน make ยกเว้นเวลาในการปรับแต่งที่มีการเปลี่ยนแปลงเฉพาะในจินตนาการของ make เท่านั้น