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

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

8
ทำไม gcc ไม่พบคำว่า libevent เมื่อสร้าง tmux จากซอร์ส?
ฉันต้องการติดตั้ง tmux บนเครื่องที่ฉันไม่มีสิทธิ์เข้าถึงรูต ฉันได้รวบรวม libevent และติดตั้งแล้ว$HOME/.bin-libeventและตอนนี้ฉันต้องการรวบรวม tmux แต่การกำหนดค่ามักจะจบลงด้วยconfigure: error: "libevent not found"แม้ว่าฉันพยายามที่จะชี้ไปที่ไดเรกทอรี libevent ในMakefile.amโดยการปรับเปลี่ยนLDFLAGSและCPPFLAGSแต่ดูเหมือนว่าจะไม่มีอะไรทำงาน ฉันจะบอกให้ระบบค้นหาผู้ใช้ที่บ้านของฉันเพื่อหาคนเก็บตัวได้อย่างไร

4
วัตถุประสงค์ของคำสั่ง 'ติดตั้ง' คืออะไร?
ฉันเคยเห็นinstallคำสั่งที่ใช้ใน Makefiles จำนวนมากและการมีอยู่และการใช้งานของมันค่อนข้างสับสน จาก manpages ก็ดูเหมือนว่าชุ่ยของcpที่มีคุณสมบัติที่น้อยลง cpแต่ฉันคิดว่ามันจะไม่ถูกนำมาใช้จนกว่าจะมีข้อได้เปรียบบางกว่า ตกลงคืออะไร?
49 command-line  make  cp 

1
ทำให้ข้อผิดพลาดร้ายแรง: openssl / sha.h: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
ฉันกำลังพยายามรวบรวมโปรแกรมที่ต้องใช้ "OpenSSL ไลบรารี่" ตามเอกสารประกอบ ฉันมี OpenSSL openssl/sha.h: No such file or directoryติดตั้งและก็ยังคงให้ฉันข้อผิดพลาด มีห้องสมุดอื่น ๆ ที่จะต้องติดตั้งหรือไม่
47 debian  make  openssl  ssl 

1
Makefile นี้ทำให้โปรแกรม C โดยไม่ต้องระบุคอมไพเลอร์ได้อย่างไร
ผมก็ใช้ Makefile จากหนังสือ " การเขียนโปรแกรมขั้นสูงลินุกซ์ (2001)" [code] มันแปลกสำหรับฉันที่เห็นว่าGNU make ทำการคอมไพล์โค้ดอย่างถูกต้องโดยไม่ต้องระบุคอมไพเลอร์ใน Makefile มันเหมือนการอบไม่มีสูตรใด ๆ ! นี่เป็นรหัสขั้นต่ำ: test.c int main(){} Makefile all: test และทำให้ได้ผลจริง ๆ ! นี่คือคำสั่งที่รัน: cc test.c -o test ฉันไม่พบสิ่งที่มีประโยชน์ในเอกสาร เป็นไปได้อย่างไร? PS หมายเหตุเพิ่มเติมหนึ่ง: แม้ภาษาจะไม่ได้ระบุ; เพราะtest.cใช้ได้ GNU ใช้make ccหากมีอยู่test.cppหรือtest.cc(เมื่อไม่มีtest.c) ก็ใช้g++(และไม่c++)
41 linux  make  gcc  gnu-make 

9
jemalloc และข้อผิดพลาดอื่น ๆ ทำให้ redis บน centos 6.4
ฉันกำลังตั้งค่าระบบ centos 6.4 ใหม่ที่ทุ่มเทและมีสีแดง ฉันติดตั้ง redis หลายครั้ง แต่ไม่เคยมีปัญหานี้มาก่อน (และไม่เคยมีใน centos 6.4 มาก่อน) cd redis-2.6.16 sudo make install ข้อผิดพลาด: MAKE jemalloc cd jemalloc && ./configure --with-lg-quantum=3 --with-jemalloc-prefix=je_ --enable-cc-silence CFLAGS="-std=gnu99 -Wall -pipe -g3 -O3 -funroll-loops " LDFLAGS="" /bin/sh: ./configure: Permission denied make[2]: *** [jemalloc] Error 126 make[2]: Leaving directory `/tmp/redis32/redis-3.2.6/deps' make[1]: [persist-settings] …
41 centos  make 

10
ทำไมโปรแกรมไม่กระจายในรูปแบบที่คอมไพล์แล้ว?
แต่พวกเขาให้คำแนะนำเช่น cd downloaded_program ./configure make install สิ่งนี้จะสร้างเอลฟ์ที่จำเป็นและอาจเป็นไฟล์. so บางไฟล์ ทำไมไม่วางไฟล์เหล่านั้นไว้ในไฟล์ zip เพื่อดาวน์โหลดเช่นเดียวกับแอพ windows? มีเหตุผลใดที่พวกเขาต้องรวบรวมโดยผู้ใช้?

4
วิธีการกำหนดจำนวนสูงสุดที่จะผ่านไปยังตัวเลือก -j?
ฉันต้องการรวบรวมให้เร็วที่สุด ไปคิด และต้องการให้ตัวเลือกของตัวเลขตาม-jตัวเลือกโดยอัตโนมัติ ฉันจะเลือกค่านั้นโดยทางโปรแกรมเช่นในเชลล์สคริปต์ได้อย่างไร เอาต์พุตของnprocเทียบเท่ากับจำนวนเธรดที่ฉันมีให้คอมไพล์ด้วยหรือไม่? make -j1 make -j16

8
ฉันจะเปลี่ยนเวอร์ชันของ Qt ที่ใช้สำหรับ qmake ได้อย่างไร
ฉันรู้สึกว่าควรจะมีวิธีง่ายๆในการทำเช่นนี้ แต่ googlefu ของฉันล้มเหลวดังนั้นฉันจึงขอขอบคุณข้อมูลบางอย่างเกี่ยวกับวิธีการเปลี่ยน (หรือเปลี่ยนแปลงอย่างถาวร) ซึ่งรุ่น Qt ที่ใช้เมื่อทำ qmake หากฉันถามว่าฉันได้รับเวอร์ชันใดต่อไปนี้: ~ $ qmake --version QMake version 3.0 Using Qt version 5.0.1 in /usr/lib/x86_64-linux-gnu ฉันติดตั้ง QtCreator แล้ว แต่ฉันไม่แน่ใจว่าจะไปจากที่นี่
31 make  qt  qtcreator 

3
ไฟล์. in คืออะไร
บางครั้งในแหล่งที่มาของโครงการฉันเห็นไฟล์ "* .in" ตัวอย่างเช่นพวงของ "Makefile.in" พวกเขามีไว้เพื่ออะไรและ / หรือส่วน ".in" หมายถึงอะไร? ฉันคิดว่านี้มีสิ่งที่จะทำอย่างไรกับautoconfหรือmakeหรือสิ่งที่ต้องการเหล่านั้น แต่ผมไม่แน่ใจว่า ฉันได้ลองค้นหา ".in file extension", "autoconf .in file extension", "autoconf .in", "autoconf dot in" และตัวแปรอื่น ๆ โดยไม่มีโชค

1
เกิดอะไรขึ้นในแต่ละขั้นตอนของกระบวนการสร้างเคอร์เนล Linux
ฉันได้อ่านแบบฝึกหัดมากมายเกี่ยวกับวิธีสร้างเคอร์เนลที่กำหนดเองและการบูต Ubuntu โดยใช้เมล็ดเหล่านั้นและทำตามคำแนะนำและเมล็ดที่กำหนดเองที่บู๊ตเรียบร้อยแล้ว แต่ฉันไม่เข้าใจเกี่ยวกับสิ่งที่คำสั่งแต่ละคำสั่งในไกด์ทำ แต่ละคำสั่ง ขั้นตอนที่อธิบายในเว็บไซต์ของ Ubuntuไม่มากของการทำงานกับfakeroot, dpkg, make-kpkg, initramfs บางส่วนและสิ่งที่น่ากลัวอื่น ๆ ที่ผลงาน แต่ก็ไม่ได้ช่วยให้ฉันเข้าใจสิ่งที่เกิดขึ้น เอาต์พุตของอะไรmakeในไดเร็กทอรีเคอร์เนล linux? มันสร้าง "ภาพเคอร์เนลที่บีบอัด" หรือไม่? ไฟล์ "บีบอัดอิมเมจเคอร์เนล" ชื่ออะไรและวางไว้ที่ไหน อะไรmake modulesทำอย่างไร ควรmake modulesจะทำก่อนหรือหลังmake? ไม่ได้makeสร้างโมดูลของฉันโดยอัตโนมัติหรือไม่ กระบวนการ (เป็นภาษาอังกฤษไม่ใช่แค่รายการคำสั่ง) ของการเพิ่มเมล็ดที่สร้างขึ้นใหม่ลงในรายการของเมล็ดที่สามารถบู๊ตได้? อะไรmake installทำอย่างไร จะmake installเพิ่มลงในรายการเคอร์เนลที่ใช้บู๊ตได้หรือไม่เพื่อไม่ต้องทำอะไรอีก มีสิ่งที่เทียบเท่าmake modules_installหรือไม่?

5
Makefile มีไฟล์ env
ฉันกำลังพยายามรวม env vars ไว้ใน Makefile ไฟล์ env ดูเหมือนว่า: FOO=bar BAZ=quux โปรดทราบว่าไม่มีการนำexportไปสู่แต่ละ env var หากฉันเพิ่มไฟล์นำหน้าexportและเป็นเพียงincludeไฟล์ env ใน Makefile ทุกอย่างทำงานได้ตามที่ควรจะเป็น แต่ผมจำเป็นต้องให้การ env vars exportซันส์ชั้นนำ ที่ป้องกันไม่ให้ฉันเพียงแค่ใช้include envfileใน Makefile ฉันได้ลองทำบางสิ่งเช่นนี้: sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env include $(BUILDDIR)/env แต่การทำเช่นนั้นทำให้เกิดข้อผิดพลาดเนื่องจากไฟล์ env ไม่ได้มีไว้สำหรับรวมถึง

2
ฉันจะหารายการรหัสข้อผิดพลาด 'ทำ' ได้จากที่ใด
ฉันพยายามรวบรวมโปรแกรมที่เขียนใน Fortran โดยใช้make(ฉันมีMakefileและในขณะที่อยู่ในไดเรกทอรีที่มีMakefileฉันพิมพ์คำสั่ง$ make targetโดยที่ "เป้าหมาย" คือข้อกำหนดคุณสมบัติเป้าหมายเฉพาะระบบอยู่ในMakefileของฉัน ทดสอบกับการแก้ไขต่าง ๆ ของการกำหนดเป้าหมายของฉันฉันมักจะได้รับความหลากหลายของข้อผิดพลาดเมื่อพยายามที่จะเรียกร้องmakeเพื่อให้ไม่กี่ตัวอย่าง. make[1]: Entering directory /bin/sh: line 0: test: too many arguments ./dpp angfrc.f > angfrc.tmp.f /bin/sh: ./dpp: Permission denied make[1]: *** [angfrc.o] Error 126 make[1]: Leaving directory make: *** [cmu60] Error 2 และ make[1]: Entering directory /bin/sh: line 0: test: too …

3
อย่าหยุดทำการสร้างหากคำสั่งล้มเหลว แต่ตรวจสอบสถานะออก
ฉันกำลังพยายามสั่ง GNU ทำให้ 3.81 ไม่หยุดถ้าคำสั่งล้มเหลว (ดังนั้นฉันจึงนำหน้าคำสั่งด้วย-) แต่ฉันต้องการตรวจสอบสถานะการออกจากคำสั่งถัดไปและพิมพ์ข้อความที่ให้ข้อมูลเพิ่มเติม อย่างไรก็ตาม Makefile ของฉันด้านล่างล้มเหลว: $ cat Makefile all: -/bin/false ([ $$? -eq 0 ] && echo "success!") || echo "failure!" $ $ make /bin/false make: [all] Error 1 (ignored) ([ $? -eq 0 ] && echo "success!") || echo "failure!" success! เหตุใด Makefile ด้านบนจึงแสดงว่า …
22 make  gnu-make 

2
การตรวจสอบค่าตัวแปรสภาพแวดล้อมใน Makefile
ฉันมีเป้าหมาย Makefile ซึ่งฉันต้องตรวจสอบค่าของตัวแปรสภาพแวดล้อม แต่ฉันไม่ได้รับมันแน่นอน พยายามอย่างหนัก แต่หาไม่เจอ ความช่วยเหลือใด ๆ ที่ชื่นชม ชื่อตัวแปรสภาพแวดล้อม: ทดสอบค่าของมัน: "TRUE" test_target: ifeq ($(TEST),"TRUE") echo "Do something" endif ฉันได้รับข้อผิดพลาดต่อไปนี้: /bin/sh: -c: line 0: syntax error near unexpected token `"TRUE","TRUE"' /bin/sh: -c: line 0: `ifeq ("TRUE","TRUE")'
21 shell  make 

3
การติดตั้งจากแหล่งที่มา วิธีแก้ไขการอ้างอิงโดยไม่ทำลายตัวจัดการแพ็กเกจ
การคอมไพล์และติดตั้งซอฟต์แวร์เป็นความเจ็บปวดและปัญหาที่ฉันไม่สามารถเอาชนะได้ ฉันแค่อยากจะทำความเข้าใจกับกระบวนการนี้กับใครสักคนที่มีความรู้มากขึ้นเพื่อล้างใจของฉันเพื่อไปสู่ระดับต่อไป ซอฟต์แวร์ทางวิทยาศาสตร์มากมายที่ฉันต้องการไม่ได้จัดจำหน่ายเป็นแพ็คเกจ ฉันเข้าใจ "./configure" ตั้งค่าตัวแปรการรวบรวมและการตรวจสอบการอ้างอิง "ทำ" การรวบรวม "sudo make install" ทำให้ไลบรารีและถังขยะทั้งหมดอยู่ในตำแหน่งของพวกเขา อย่างไรก็ตามมันไม่ทำงาน ฉันไม่ค่อยออกจากเวที) "./configure" โดยไม่ต้องพึ่งนรกและถ้าฉันทำข) "sudo make install" อาจจะเป็นช่องของฉัน a) นรกพึ่งพานั้นน่าผิดหวังมาก บางครั้งฉันมีห้องสมุด แต่ก็ไม่ชอบ หรือไลบรารีไม่ต้องการติดตั้ง หรือ "กำหนดค่า" หาไม่พบ หรือ distro ของฉันวางไว้ที่ไหนสักแห่งที่มันไม่ควรจะเป็น หรือมีสองรุ่นในระบบของฉัน ปัญหาคือฉันไม่เข้าใจวิธีการวินิจฉัยและแก้ไขปัญหาเหล่านี้ มีการอ้างอิงที่ดีอะไรบ้างที่จะเรียนรู้สำหรับคนที่ไม่จำเป็นต้องเป็นโปรแกรมเมอร์ b) ความเข้าใจของฉันคือ "ทำการติดตั้ง" จะแทนที่บางไลบรารีและเปลี่ยนการตั้งค่าโดยที่ผู้จัดการแพคเกจของฉันรู้เรื่องนี้ ดังนั้นบางโปรแกรมจะไม่ทำงาน แต่ไม่สามารถอัปเดตโปรแกรมอื่นได้ ดังนั้นหากฉันไม่ได้ใช้ "make install" และเพียงแค่เก็บไบนารีที่รวบรวมไว้ในไดเรกทอรีผู้ใช้ของฉันด้วยการเชื่อมโยงสัญลักษณ์ที่เพิ่มเข้าไปใน PATH ฉันจะชัดเจนไหม กล่องของฉันเป็นผู้ใช้คนเดียวมี HD ฟรีมากมายดังนั้นฉันไม่สนใจว่าจะมีสำเนาห้องสมุดหลายสิบชุดถ้ามันจะช่วยแก้ปัญหาของฉันได้ พื้นที่มีราคาถูก

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