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

makefile เป็นไฟล์อินพุตสำหรับภาษา / เครื่องมือสร้างบิลด์ มันระบุเป้าหมายและการอ้างอิงพร้อมกับคำสั่งที่เกี่ยวข้องเพื่อดำเนินการ (สูตรอาหาร aka) เพื่ออัปเดตเป้าหมาย

7
ฉันจะกำหนดคอนฟิก makefile ของฉันสำหรับการดีบักและปล่อยบิลด์ได้อย่างไร?
ฉันมี makefile ต่อไปนี้สำหรับโครงการของฉันและฉันต้องการกำหนดค่าให้เป็นรุ่นวางจำหน่ายและแก้ไขข้อบกพร่อง ในรหัสของฉันฉันมี#ifdef DEBUGมาโครจำนวนมากดังนั้นจึงเป็นเรื่องของการตั้งค่าแมโครนี้และเพิ่มการตั้ง-g3 -gdwarf2ค่าสถานะลงในคอมไพเลอร์ ฉันจะทำสิ่งนี้ได้อย่างไร $(CC) = g++ -g3 -gdwarf2 $(cc) = gcc -g3 -gdwarf2 all: executable executable: CommandParser.tab.o CommandParser.yy.o Command.o g++ -g -o output CommandParser.yy.o CommandParser.tab.o Command.o -lfl CommandParser.yy.o: CommandParser.l flex -o CommandParser.yy.c CommandParser.l gcc -g -c CommandParser.yy.c CommandParser.tab.o: CommandParser.y bison -d CommandParser.y g++ -g -c CommandParser.tab.c …
175 makefile  gnu-make 

8
รวบรวมด้วย g ++ โดยใช้หลายแกน
คำถามด่วน: ธงคอมไพเลอร์คืออะไรที่อนุญาตให้ g ++ วางไข่หลายอินสแตนซ์ของตัวเองเพื่อรวบรวมโครงการขนาดใหญ่ได้เร็วขึ้น (เช่นไฟล์ต้นฉบับ 4 ไฟล์ในเวลาเดียวกันสำหรับ CPU แบบมัลติคอร์)?

2
@, - และ + ทำอะไรเป็นคำนำหน้าของบรรทัดสูตรใน Make
ในคู่มือ GNU Makefile นั้น กล่าวถึงคำนำหน้าเหล่านี้ หากมีการจัดเตรียม. ONESHELL จะมีการตรวจสอบเฉพาะบรรทัดแรกของสูตรสำหรับอักขระนำหน้าพิเศษ ('@', '-' และ '+') คำนำหน้าเหล่านี้ทำอะไรและพวกเขาพูดถึงที่ไหน
172 makefile  gnu-make 

11
ใช้ G ++ เพื่อรวบรวมไฟล์. cpp และ. h หลายไฟล์
ฉันเพิ่งได้รับรหัส C ++ ที่เขียนได้ไม่ดีกับไฟล์ cpp หนึ่งไฟล์ซึ่งมีฟังก์ชันหลักและฟังก์ชันอื่น ๆ นอกจากนี้ยังมี.hไฟล์ที่มีคลาสและคำจำกัดความของฟังก์ชั่น g++ main.cppจนถึงขณะนี้โปรแกรมที่ถูกรวบรวมโดยใช้คำสั่ง ตอนนี้ฉันแยกชั้นเรียน.hและ.cppไฟล์ฉันจำเป็นต้องใช้ makefile หรือไม่ฉันยังสามารถใช้g++ main.cppคำสั่งได้หรือไม่

13
การคอมไพล์ C ++ บนเครื่อง Linux ระยะไกล - คำเตือน“ ตรวจพบการเอียงนาฬิกา”
ฉันเชื่อมต่อกับคลัสเตอร์ Linux ขนาดเล็กของมหาวิทยาลัยของฉันผ่าน PuTTY และ WinSCP ถ่ายโอนไฟล์โดยใช้อันหลังและรวบรวมและเรียกใช้งานกับกลุ่มเก่า งานของฉันได้รับการดำเนินการแล้วในห้องทดลองของมหาวิทยาลัย แต่วันนี้ฉันทำงานที่บ้านซึ่งสร้างคำเตือนที่น่าสนใจ ฉันอัพโหลดโฟลเดอร์ทั้งหมดของสิ่งของและเมื่อใช้makeคำสั่งฉันจะได้รับสิ่งนี้เป็นบรรทัดสุดท้ายของผลลัพธ์: ทำให้: คำเตือน: ตรวจพบนาฬิกาเอียง งานสร้างของคุณอาจไม่สมบูรณ์ ไบนารีที่ได้นั้นทำงานได้อย่างถูกต้องและดูเหมือนจะไม่มีข้อผิดพลาดที่ไม่คาดคิดอื่น ๆ ในกระบวนการสร้าง ฉันดูเหมือนจะสามารถทริกเกอร์ข้อผิดพลาดได้โดยการสร้างหลังจากอัปโหลดไฟล์ใหม่ / ไฟล์ทดแทน (ฉันแก้ไขทุกอย่างในเครื่องจากนั้นอัปโหลดเวอร์ชันใหม่) ดังนั้นฉันสงสัยว่ามันเป็นเรื่องง่ายเหมือนการแก้ไขไฟล์ที่ไม่ตรงกันหรือไม่ หรือมีอะไรเกี่ยวข้องมากกว่านี้? ดังนั้นฉันควรกังวล ฉันจะแก้ไข / ป้องกันได้อย่างไร
168 linux  makefile 

17
ทำไมไม่มีใครใช้ make for Java?
เกือบทุกโปรเจ็กต์ Java ที่ฉันเคยเห็นใช้ Maven หรือ Ant พวกเขาเป็นเครื่องมือที่ดีและฉันคิดว่าโครงการใด ๆ สามารถใช้งานได้ แต่สิ่งที่เคยเกิดขึ้นกับให้ ? มันใช้สำหรับโครงการที่ไม่ใช่ Java ที่หลากหลายและสามารถจัดการกับ Java ได้อย่างง่ายดาย แน่นอนว่าคุณต้องดาวน์โหลด make.exe หากคุณใช้ Windows แต่ Ant และ Maven ยังไม่ได้มาพร้อมกับ JDK มีข้อบกพร่องพื้นฐานกับ make เมื่อใช้กับ Java หรือไม่ มันเป็นเพราะ Ant และ Maven เขียนด้วยภาษาจาวาใช่ไหม
162 java  ant  makefile  maven 


5
ยกเลิก makefile หากไม่ได้ตั้งค่าตัวแปร
ฉันจะยกเลิกการดำเนินการ make / makefile ตามตัวแปรของ makefile ที่ไม่ได้ตั้งค่า / มีค่าได้อย่างไร ฉันมากับสิ่งนี้ แต่ใช้ได้เฉพาะเมื่อผู้โทรไม่ได้เรียกใช้เป้าหมายอย่างชัดเจน (เช่นทำงานmakeเท่านั้น) ifeq ($(MY_FLAG),) abort: ## This MUST be the first target :( ugly @echo Variable MY_FLAG not set && false endif all: @echo MY_FLAG=$(MY_FLAG) ฉันคิดว่าสิ่งนี้จะเป็นความคิดที่ดี แต่ไม่พบอะไรในคู่มือของยี่ห้อ: ifndef MY_FLAG .ABORT endif
151 makefile 


7
ทำการติดตั้ง แต่ไม่ใช่ไปยังไดเรกทอรีเริ่มต้นหรือไม่
ฉันต้องการเรียกใช้ 'ทำการติดตั้ง' ดังนั้นฉันจึงมีทุกอย่างที่ฉันต้องการ แต่ฉันต้องการให้มันติดตั้งสิ่งต่าง ๆ ในโฟลเดอร์ของตัวเองซึ่งตรงข้ามกับระบบ / usr / bin ฯลฯ เป็นไปได้ไหม แม้ว่ามันจะอ้างอิงถึงเครื่องมือใน / usr / bin เป็นต้น?
148 linux  gcc  makefile  autotools 

4
ไม่แสดงการเรียกใช้คำสั่งใน makefile หรือไม่
ฉันเขียนโปรแกรมสำหรับการมอบหมายซึ่งควรจะพิมพ์เอาต์พุตไปยัง stdout ข้อมูลจำเพาะที่ได้รับมอบหมายต้องมีการสร้าง Makefile ซึ่งเมื่อเรียกใช้ตามที่make run > outputFileควรเรียกใช้โปรแกรมและเขียนผลลัพธ์ไปยังไฟล์ซึ่งมีลายนิ้วมือ SHA1 ซึ่งเหมือนกับลายนิ้วมือที่ได้รับในข้อมูลจำเพาะ ปัญหาของฉันคือ makefile ของฉัน: ... run: java myprogram พิมพ์คำสั่งที่รันโปรแกรมของฉัน (เช่น java myprogram) ไปยังไฟล์เอาต์พุตเพื่อให้ไฟล์ของฉันมีบรรทัดพิเศษนี้ทำให้ลายนิ้วมือผิด มีวิธีการดำเนินการคำสั่งใด ๆ โดยไม่ต้องคำสั่งภาวนาสะท้อนไปยังบรรทัดคำสั่งหรือไม่
147 linux  unix  makefile  posix 

7
ทำ: วิธีการดำเนินการต่อหลังจากคำสั่งล้มเหลว?
คำสั่ง$ make allให้ข้อผิดพลาดเช่นrm: cannot remove '.lambda': No such file or directoryนั้นหยุด ฉันต้องการให้ละเว้นข้อผิดพลาด rm-not-found-errors ฉันจะบังคับให้ทำอย่างไร Makefile all: make clean make .lambda make .lambda_t make .activity make .activity_t_lambda clean: rm .lambda .lambda_t .activity .activity_t_lambda .lambda: awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda .lambda_t: paste .lambda t_year > .lambda_t .activity: awk '{printf …
143 makefile 

12
ฉันจะตรวจสอบได้อย่างไรว่ามีไฟล์อยู่ใน Makefile เพื่อที่ฉันจะสามารถลบได้
ในส่วนสะอาดของฉันMakefileฉันกำลังพยายามตรวจสอบว่ามีไฟล์อยู่หรือไม่ก่อนที่จะลบอย่างถาวร ฉันใช้รหัสนี้ แต่ได้รับข้อผิดพลาด มันผิดอะไร? if [ -a myApp ] then rm myApp fi ฉันได้รับข้อความแสดงข้อผิดพลาดนี้ if [ -a myApp ] /bin/sh: Syntax error: end of file unexpected (expecting "then") make: *** [clean] Error 2
143 makefile 

8
ตัวแปร Makefile เป็นข้อกำหนดเบื้องต้น
ใน Makefile deployสูตรอาหารต้องการตัวแปรสภาพแวดล้อมENVเพื่อตั้งค่าให้ดำเนินการเองอย่างถูกต้องในขณะที่คนอื่นไม่สนใจเช่น: ENV = .PHONY: deploy hello deploy: rsync . $(ENV).example.com:/var/www/myapp/ hello: echo "I don't care about ENV, just saying hello!" ฉันจะแน่ใจได้อย่างไรว่าตัวแปรนี้ถูกตั้งค่าเช่น: มีวิธีประกาศตัวแปร makefile นี้เป็นข้อกำหนดเบื้องต้นของสูตรการปรับใช้หรือไม่เช่น: deploy: make-sure-ENV-variable-is-set
141 makefile 


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