คำถามติดแท็ก make

สำหรับคำถามที่เกี่ยวข้องกับการทำโปรแกรมอรรถประโยชน์ที่สร้างกระบวนการสร้างโดยอัตโนมัติโดยการจัดการการอ้างอิงระหว่างเป้าหมาย ใช้แท็กนี้สำหรับคำถามเกี่ยวกับสร้างเองหรือคำถามเกี่ยวกับปัญหาที่เกิดขึ้นจากการใช้ยูทิลิตี make-line ของบรรทัดคำสั่ง

1
การ จำกัด GNU ‑ ทำเพื่อ POSIX สร้างพฤติกรรม
มีวิธีที่รู้จักกันในการทำให้ Linux makeปฏิเสธการใช้ GNU โดยไม่ตั้งใจหรือไม่ทำส่วนขยายเฉพาะใน Makefile เมื่อแก้ไขหรือใช้ Makefile ใน Linux อื่น ๆ ฉันหมายถึงการ จำกัด GNU ‑ ทำตัวตามที่makeระบุใน POSIXและปฏิเสธ GNU ใด ๆ ‑ สร้างส่วนขยายเฉพาะหรือไม่ .POSIXเป้าหมายพิเศษไม่เพียงพอตามที่“ 4.9 พิเศษ Built-in ชื่อเป้าหมาย (gnu.org) ” man page ไม่ได้กล่าวถึงตัวเลือกบรรทัดคำสั่งสำหรับสิ่งนี้ การใช้makeยูทิลิตี้อื่นอาจเป็นตัวเลือก - อัปเดต 2018-10-19 - ฉันยังไม่ได้พบคำตอบที่ตรงไปยังคำถามของฉัน แต่ที่นี่เป็นอย่างน้อยเอกสารเกี่ยวกับปัญหานี้เอกสารซึ่งไม่ได้อยู่ในเวลาที่ฉันมีคำถามนี้: สอนเกี่ยวกับพกพา Makefiles (nullprogram.com)
12 make  gnu-make 

3
ทำการรวบรวมต่อไปอย่างไร
ฉันรู้ว่าฉันสามารถขัดจังหวะmakeกระบวนการได้ตลอดเวลาโดยไม่ต้องคอมไพล์ต้นไม้ต้นกำเนิดอีกครั้ง อย่างที่ฉันรู้makeรวบรวมเฉพาะเป้าหมายหากยังไม่ได้รวบรวมหรือรหัสแหล่งที่มามีการแก้ไขหลังจากการรวบรวมครั้งสุดท้าย แต่ถ้าฉันขัดจังหวะmakeจะต้องมีครึ่งหนึ่ง (ขึ้นอยู่กับระดับการทำงานพร้อมกัน) อย่างแน่นอน มันจะมีอะไรทำกับพวกเขาในครั้งต่อไปผมทำงานmake? หรือมันจะเสร็จสิ้นเป้าหมายปัจจุบันเมื่อฉันกดCtrl+ Cเพื่อหลีกเลี่ยงการรวบรวมไบนารีบางส่วน?

4
makefile สามารถตรวจพบว่าคำสั่งมีอยู่ในเครื่องโลคอลได้อย่างไร
ฉันเริ่มใช้โหมดองค์กรเพื่อวางแผนงานของฉันในระบบสไตล์GTD การวางทุกไฟล์องค์กรลงในไดเรกทอรีของโฟลเดอร์Dropboxฉันเรียกใช้ emacs เพื่อแก้ไข / จัดการไฟล์เหล่านี้จากเครื่องที่แตกต่างกันสามเครื่อง: Cygwin, Mac OS X และ Debian เมื่อฉันใช้MobileOrgเพื่อเข้าถึงไฟล์ org เหล่านี้จาก iPad ของฉันchecksums.datไฟล์จะต้องได้รับการอัปเดตเมื่อมีการเปลี่ยนแปลง md5sum *.org > checksums.datซึ่งสามารถทำได้โดยการทำงาน ปัญหาคือมีคำสั่งต่างกันสามคำสั่งสำหรับmd5sum: md5sum.exeใน Cygwin, md5ใน Mac OS X และmd5sumใน Debian สถานการณ์ที่เหมาะสมที่สุดคือ makefile ซึ่งเก็บไว้ใน Dropbox foder ตรวจพบคำสั่งที่มีอยู่ในเครื่องปัจจุบันและเรียกใช้คำสั่งนั้นเพื่อทำการดำเนินการตรวจสอบ md5
11 shell  make  hashsum 

1
กระบวนการทดแทนใน GNU Makefiles
ในการพร้อมท์ bash เราสามารถเรียกใช้ diff โดยใช้ไฟล์หลอก: diff <(echo test) <(echo test) การเพิ่มสิ่งนี้ตามที่เป็นลงใน Makefile ล้มเหลว: all: diff <(echo test) <(echo test) ข้อผิดพลาด (คำใบ้: / bin / sh ชี้ไปที่ / bin / bash ในระบบนี้): /bin/sh: -c: line 0: syntax error near unexpected token `(' /bin/sh: -c: line 0: `diff <(echo test) <(echo test)' …

2
สัญลักษณ์% ใน Makefile หมายถึงอะไร
ฉันกำลังเล่นรอบกับ makefiles และฉันมาข้าม.o%หรือ.c% จากสิ่งที่ฉันเข้าใจมันระบุไฟล์cหรือoทั้งหมด แต่ทำไมงานนี้: %.o: %.c $(CC) -c $^ -o $@ และนี่ใช้ไม่ได้ SOURCE := $(wildcard *.c) $(SOURCE:.c=.o): SOURCE $(CC) -c $^ -o $@ นิพจน์ทั้งสองระบุไฟล์ทั้งหมด ดังนั้น% .o:สัญลักษณ์ในไฟล์ make จะทำอย่างไร
11 make  gnu-make 

2
ฟังก์ชั่นไฟล์ใน makefile รับ args นำหน้าด้วยสัญลักษณ์ '@'
ข้อความที่ตัดตอนมานี้มาจากบทที่ 8.6 ของคู่มือ makefile GNU @ $ @. in สำหรับฟังก์ชั่นไฟล์ arg ใน makefile หมายถึงอะไร และทำไมคำสั่งเชลล์เช่น rm นำหน้าด้วยสัญลักษณ์ '@' program: $(OBJECTS) $(file >$@.in,$^) $(CMD) $(CMDFLAGS) @$@.in @rm $@.in ไวยากรณ์ของฟังก์ชันไฟล์คือ $(file op filename[,text])
10 make 

3
สคริปต์จะทำให้ menuconfig ทำการตั้งค่าลินุกซ์เคอร์เนลบิลด์ได้อย่างไร?
ฉันต้องการสร้างลินุกซ์อัตโนมัติ แต่ในที่สุดก็มาถึงจุดที่ฉันต้องรันสิ่งที่ดูเหมือนจะเป็นขั้นตอนที่make menuconfigต้องทำด้วยตัวเอง: . ดูเหมือนว่าจะซิงโครไนซ์การกำหนดค่าระหว่างระบบปฏิบัติการและการกำหนดค่าเคอร์เนล? cp git-tracked-config .config make defconfig make menuconfig # <- how to automate/script this? make V=s โดยพื้นฐานแล้วฉันจะลบการโทรmake menuconfigสำหรับสคริปต์การสร้างได้อย่างไร นอกจากนี้สิ่งนี้เป็นการตอบสนองต่อข้อผิดพลาดในการสร้างที่ดูเหมือนว่าจะเกิดขึ้นเมื่อฉันเรียกใช้โดยไม่เรียก make menuconfig: make[1]: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'. Stop. ซึ่งดูเหมือนว่ามีกฎที่ขาดหายไปใน makefile อาจเป็นเพราะ makefile นั้นไม่มีอยู่จริงหรือ makefile ไม่ได้ถูกสร้างขึ้น / morphed เพื่อให้มีกฎนั้น แต่นั่นเป็นคำถามแยกต่างหาก อาจมีวิธีที่ฉลาดกว่าในการเข้าถึงสิ่งนี้ด้วยกัน มีการกำหนดค่าอื่น …

1
วิธีสร้างเคอร์เนลที่กำหนดเองด้วย localmodconfig ที่รองรับฮาร์ดแวร์ของหลายเครื่อง?
เมื่อกำหนดค่าเซิร์ฟเวอร์ให้รันงานเดียวเช่นอุปกรณ์อาจมีความจำเป็นในการสร้างเคอร์เนลที่กำหนดเอง ตัวอย่างเช่นการประหยัดพื้นที่ดิสก์ ระบบไฟล์รูท Ubuntu Core 13.10 amd64 คือการดาวน์โหลด38 MBซึ่งแพคเกจ meta "linux-image-generic" รวมถึงการขึ้นต่อกันที่จำเป็นจะดาวน์โหลดไฟล์เก็บถาวร79 MBและขนาดของ kernel-image-xyz-generic 14 MB . สำหรับการสร้างเคอร์เนลที่ถอดจากโมดูลที่ฮาร์ดแวร์ของคุณจะไม่ใช้make localmodconfigคำสั่งเป็นเครื่องมือที่เหมาะสมสำหรับงาน อย่างไรก็ตามเครื่องเสมือนของคุณที่รันสภาพแวดล้อมการสร้างและทดสอบของคุณโหลดโมดูลที่แตกต่างจากฮาร์ดแวร์การปรับใช้เป้าหมายของคุณ และ / หรือหลังจากนั้นไม่นานฮาร์ดแวร์การปรับใช้ของคุณอาจกลายเป็น eol และใช้ฮาร์ดแวร์ที่แตกต่างกัน และในความถี่ที่การปรับปรุงเคอร์เนลถูกปล่อยออกมามันอาจยุ่งยากเกินไปที่จะสร้างเคอร์เนลแบบกำหนดเองสำหรับการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกัน วิธีการสร้างเคอร์เนล Linux ที่กำหนดเองที่ทำงานบนกล่องฮาร์ดแวร์ที่แตกต่างกันสองสามอย่างรวดเร็ว?

1
มีผลข้างเคียง CheckInstall หรือไม่ฉันควรใช้ทุกครั้งหรือไม่
ฉันใช้ Ubuntu ที่ทำงานและ Slackware ที่บ้าน วันนี้ที่ทำงานฉันได้ดาวน์โหลดโปรแกรมที่น่าสงสัยจากที่เก็บของ บริษัท ของเราซึ่งควรจะทำงานซ้ำ ๆ ให้เป็นอัตโนมัติ configure; make; make installผมติดตั้งด้วย ตอนนี้ฉันต้องการลบออก แต่น่าเสียดายที่ไม่มีเป้าหมายที่เหมาะสมสำหรับการถอนการติดตั้งใน Makefile โปรแกรมนี้เขียนขึ้นใน Python และผู้ติดตั้งคัดลอก*.pyไฟล์จำนวนมากในที่ต่าง ๆ และตอนนี้ก็เป็นเรื่องยากที่จะลบไฟล์ทั้งหมด ดังนั้นฉันจึงคิดเกี่ยวกับ CheckInstall เพื่อใช้แทนmake installดังนั้นฉันสามารถลบโปรแกรมดังกล่าวและติดตามซอฟต์แวร์ทั้งหมดในระบบของฉันได้อย่างสอดคล้องกัน แต่ฉันสงสัยว่ามีผลข้างเคียงที่เป็นไปได้ที่เกี่ยวข้องกับ CheckInstall หรือสามารถใช้ทุกครั้งเมื่อฉันติดตั้งซอฟต์แวร์ใหม่ได้หรือไม่ คุณใช้มันหรือเปล่า?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.