ทำความเข้าใจกับคำสั่ง Unix และ Linux: make

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

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

ผู้ชายที่ใช้แล็ปท็อป
lina aidukaite / รูปภาพ Moment / Getty

วิธีใช้ Make Command ใน Linux

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

ตัวอย่างเหล่านี้แสดงให้เห็น โปรแกรมภาษาซี เนื่องจากสิ่งเหล่านี้เป็นเรื่องธรรมดาที่สุด แต่คุณสามารถใช้ make กับภาษาการเขียนโปรแกรมใดๆ ก็ได้ที่สามารถรันคอมไพเลอร์ด้วยคำสั่งเชลล์

  1. ติดตั้ง Git หากคุณไม่มี ร่วมกับเครื่องมือสร้างซอฟต์แวร์

    apt ติดตั้ง git build-essential
  2. เลือกแอปที่จะใช้งานหรือดาวน์โหลด VLC

    apt build-dep vlc
  3. โคลนซอร์สโค้ด VLC

    git โคลน https://github.com/videolan/vlc.git
  4. เปลี่ยนไดเร็กทอรีเป็นซอร์สโค้ด VLC ที่โคลน และรันสคริปต์การกำหนดค่า

    cd vlc
    ./bootstrap
    ./configure
  5. เรียกใช้ ทำ คำสั่งพร้อมกับ -NS ตั้งค่าสถานะ ตามด้วยจำนวนคอร์/เธรด CPU ที่ระบบของคุณมี

    ทำให้ -j4
  6. จะใช้เวลาสักครู่จึงจะเสร็จสมบูรณ์ เมื่อเสร็จแล้วให้ติดตั้งแอพด้วย ทำการติดตั้ง.

    sudo ทำการติดตั้ง
  7. คุณเสร็จแล้ว

บ่อยครั้ง นี่คือวิธีที่คุณจะเห็นคำสั่ง make ที่ใช้ อาจมีขั้นตอนที่ซับซ้อนกว่านี้หรือมีการเปลี่ยนแปลงเล็กน้อย แต่ก็ไม่เคยซับซ้อนเกินไป

GNU ทำให้คำสั่งทำงานอย่างไร

ส่วนด้านล่างเป็นรายละเอียดทางเทคนิคของคำสั่ง make หากคุณต้องการสร้างประโยชน์สูงสุด โปรดดูตัวเลือกด้านล่าง

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

ไวยากรณ์และการเตรียมยูทิลิตี้ทำ

ไวยากรณ์ของ make ยูทิลิตี้คือ ทำ -NSmakefile ] [ ตัวเลือก ]... เป้า...

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

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

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

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

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

ตัวเลือกสำหรับ Make Utility

NS -NS และ -NS ตัวเลือกต่างๆ จะถูกละเว้นเนื่องจากความเข้ากันได้กับยี่ห้ออื่น

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

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

NS -e ตัวเลือกให้ตัวแปรที่นำมาจากลำดับความสำคัญของสภาพแวดล้อมมากกว่าตัวแปรจาก makefiles

NS -NS ไฟล์ตัวเลือกที่ใช้ ไฟล์ เป็น makefile

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

NS -ผม dirตัวเลือกระบุไดเร็กทอรี dir เพื่อค้นหา makefiles ที่รวมอยู่ ถ้าหลาย-ผม ตัวเลือกใช้เพื่อระบุหลายไดเร็กทอรี ค้นหาไดเร็กทอรีตามลำดับที่ระบุ ไม่เหมือนกับอาร์กิวเมนต์ของแฟล็ก make อื่นๆ ไดเร็กทอรี with -ผม ธงอาจมาหลังธงโดยตรง: -อีดีร์ ได้รับอนุญาตเช่นเดียวกับ -I dir. ไวยากรณ์นี้ได้รับอนุญาตสำหรับความเข้ากันได้กับ C ตัวประมวลผลล่วงหน้าของ -ผม ธง.

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

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

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

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

NS -o ไฟล์ตัวเลือกไม่ได้สร้างใหม่ ไฟล์ แม้ว่ามันจะเก่ากว่าการพึ่งพาและไม่ได้สร้างอะไรขึ้นมาใหม่เนื่องจากการเปลี่ยนแปลงในไฟล์. โดยพื้นฐานแล้วไฟล์จะถือว่าเก่าและกฎของไฟล์จะถูกละเว้น

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

NS -NS ตัวเลือกกำหนดโหมดคำถาม มันไม่รันคำสั่งหรือพิมพ์อะไรเลย ส่งคืนสถานะการออกที่เป็นศูนย์หากเป้าหมายที่ระบุเป็นข้อมูลล่าสุด มิฉะนั้นจะเป็นศูนย์

NS -NS ตัวเลือกช่วยลดการใช้กฎโดยนัยในตัว นอกจากนี้ยังล้างรายการเริ่มต้นของคำต่อท้ายสำหรับกฎส่วนต่อท้าย

NS -NS ตัวเลือกปิดเสียงการทำงาน ไม่พิมพ์คำสั่งในขณะที่ดำเนินการ

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

NS -NS ตัวเลือกสัมผัสไฟล์ (ทำเครื่องหมายให้เป็นปัจจุบันโดยไม่ต้องเปลี่ยนแปลง) แทนที่จะเรียกใช้คำสั่ง ใช้เพื่อแสร้งทำเป็นว่าคำสั่งนั้นเสร็จสิ้นแล้ว เพื่อหลอกการเรียกใช้ make ในอนาคต

NS -v option พิมพ์เวอร์ชันของโปรแกรม make บวกกับลิขสิทธิ์ รายชื่อผู้เขียน และประกาศที่ไม่มีการรับประกัน

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

NS -W ไฟล์ ตัวเลือกแกล้งทำเป็นว่าเป้าหมายไฟล์ได้รับการแก้ไขแล้ว เมื่อใช้ร่วมกับ -NS ตั้งค่าสถานะ สิ่งนี้จะแสดงให้คุณเห็นว่าจะเกิดอะไรขึ้นหากคุณต้องแก้ไขไฟล์นั้น ปราศจาก -NS, มันเกือบจะเหมือนกับการวิ่ง a สัมผัส คำสั่งบนไฟล์ที่กำหนดก่อนที่จะรัน make ยกเว้นว่าเวลาการแก้ไขจะเปลี่ยนแปลงในจินตนาการของ make เท่านั้น