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

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

15
วิธีพิมพ์ตัวแปรใน makefile
ใน makefile ของฉันฉันมีตัวแปร 'NDK_PROJECT_PATH' คำถามของฉันคือฉันจะพิมพ์ออกมาเมื่อคอมไพล์ได้อย่างไร ฉันอ่านMake file echo แสดงสตริง "$ PATH"แล้วลอง: @echo $(NDK_PROJECT_PATH) @echo $(value NDK_PROJECT_PATH) ทั้งสองให้ฉัน "build-local.mk:102: *** missing separator. Stop." ใครรู้ว่าทำไมมันไม่ทำงานสำหรับฉัน
247 makefile  gnu-make 


7
วิธีกำหนดเอาต์พุตของคำสั่งให้กับตัวแปร Makefile
ฉันจำเป็นต้องดำเนินการบางอย่างให้กฎตามเงื่อนไขเฉพาะในกรณีที่ติดตั้ง Python มากกว่ารุ่นที่แน่นอน (พูด 2.5) ฉันคิดว่าฉันสามารถทำอะไรบางอย่างเช่นการดำเนินการ: python -c 'import sys; print int(sys.version_info >= (2,5))' จากนั้นใช้เอาต์พุต ('1' ถ้าตกลง '0' เป็นอย่างอื่น) ในifeqคำสั่ง make ในเชลล์สคริปอย่างง่าย ๆ มันแค่: MY_VAR=`python -c 'import sys; print int(sys.version_info >= (2,5))'` แต่มันไม่ทำงานใน Makefile ข้อเสนอแนะใด ๆ ฉันสามารถใช้วิธีแก้ไขปัญหาอื่น ๆ ที่สมเหตุสมผลเพื่อบรรลุเป้าหมายนี้
225 shell  makefile 

4
ทำไมถึงคิดว่าเป้าหมายเป็นปัจจุบัน?
นี่คือ Makefile ของฉัน: REBAR=./rebar REBAR_COMPILE=$(REBAR) get-deps compile all: compile compile: $(REBAR_COMPILE) test: $(REBAR_COMPILE) skip_deps=true eunit clean: -rm -rf deps ebin priv doc/* docs: $(REBAR_COMPILE) doc ifeq ($(wildcard dialyzer/sqlite3.plt),) static: $(REBAR_COMPILE) build_plt analyze else static: $(REBAR_COMPILE) analyze endif ฉันสามารถวิ่งได้make compileหลายครั้งและรับ aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make compile ./rebar get-deps compile ==> erlang-sqlite (get-deps) ==> erlang-sqlite …
224 makefile 

9
makeinfo คืออะไรและฉันจะรับได้อย่างไร
ฉันกำลังพยายามสร้าง grep GNU และเมื่อฉันเริ่มทำฉันจะได้รับ: [snip] /bin/bash: line 9: makeinfo: command not found makeinfo คืออะไรและฉันจะรับได้อย่างไร (นี่คือ Ubuntu ถ้ามันสร้างความแตกต่าง)
223 ubuntu  gcc  makefile  grep 

9
ฉันจะหาโปรแกรม“ สร้าง” สำหรับ Mac OS X Lion ได้จากที่ใด
เพิ่งอัพเกรดคอมพิวเตอร์ของฉันเป็น Mac OS X Lion และไปที่เทอร์มินัลแล้วพิมพ์ "ทำ" แต่มันบอกว่า: -bash: make: ไม่พบคำสั่ง คำสั่ง "make" หายไปไหน
222 macos  makefile  osx-lion 



4
กำหนดตัวแปรในเวลาดำเนินการของกฎ
ใน GNUmakefile ของฉันฉันต้องการมีกฎที่ใช้ไดเรกทอรีชั่วคราว ตัวอย่างเช่น: out.tar: TMP := $(shell mktemp -d) echo hi $(TMP)/hi.txt tar -C $(TMP) cf $@ . rm -rf $(TMP) เขียนเป็นกฎข้างต้นสร้างไดเรกทอรีชั่วคราวในเวลาที่กฎจะถูกแยกวิเคราะห์ ซึ่งหมายความว่าแม้ว่าฉันจะไม่สร้าง out.tar ตลอดเวลาก็มีการสร้างไดเรกทอรีชั่วคราวจำนวนมาก ฉันต้องการหลีกเลี่ยง / tmp ของฉันที่เกลื่อนไปด้วยไดเรกทอรีชั่วคราวที่ไม่ได้ใช้ มีวิธีที่จะทำให้ตัวแปรถูกกำหนดเมื่อกฎถูกไล่ออกซึ่งตรงข้ามกับเมื่อใดก็ตามที่มันถูกกำหนด? ความคิดหลักของฉันคือการทิ้ง mktemp และ tar ลงในเชลล์สคริปต์ แต่มันก็ดูไม่น่าดู
209 makefile  gnu-make 

6
ฉันจะใช้ไวยากรณ์ Bash ในเป้าหมาย Makefile ได้อย่างไร
ฉันมักจะพบทุบตีdiff <(sort file1) <(sort file2)ไวยากรณ์ประโยชน์มากเปลี่ยนตัวกระบวนการเช่นเหมือนใน เป็นไปได้ไหมที่จะใช้คำสั่ง Bash ใน Makefile ฉันกำลังคิดถึงสิ่งนี้: file-differences: diff <(sort file1) <(sort file2) > $@ ใน GNU Make 3.80 ของฉันนี่จะทำให้เกิดข้อผิดพลาดเนื่องจากใช้shellแทนbashการใช้คำสั่ง
208 bash  shell  makefile 

12
วิธีรับไดเรกทอรีสัมพันธ์ปัจจุบันของ Makefile ของคุณ
ฉันมี Makefiles หลายตัวในไดเรกทอรีเฉพาะแอพเช่นนี้: /project1/apps/app_typeA/Makefile /project1/apps/app_typeB/Makefile /project1/apps/app_typeC/Makefile Makefile แต่ละไฟล์มีไฟล์. inc ในพา ธ นี้หนึ่งระดับขึ้นไป: /project1/apps/app_rules.inc ภายใน app_rules.inc ฉันกำลังตั้งค่าปลายทางที่ฉันต้องการให้วางไบนารีเมื่อสร้าง ฉันต้องการให้ไบนารีทั้งหมดอยู่ในapp_typeเส้นทางของพวกเขา: /project1/bin/app_typeA/ ฉันพยายามใช้$(CURDIR)เช่นนี้ OUTPUT_PATH = /project1/bin/$(CURDIR) แต่ผมได้ไบนารีฝังอยู่ในชื่อเส้นทางทั้งหมดเช่นนี้(แจ้งให้ทราบล่วงหน้าซ้ำซ้อน) /project1/bin/projects/users/bob/project1/apps/app_typeA ฉันจะทำอย่างไรเพื่อให้ได้รับ "ไดเรกทอรีปัจจุบัน" ของการดำเนินการเพื่อให้ฉันสามารถรู้เพียงapp_typeXเพื่อวางไบนารีในโฟลเดอร์ประเภทของพวกเขา?

17
คุณจะรับรายชื่อเป้าหมายใน makefile ได้อย่างไร
ฉันใช้เรคบิต (โปรแกรมทำ Ruby) และมีตัวเลือกเพื่อรับรายการเป้าหมายที่มีอยู่ทั้งหมดเช่น > rake --tasks rake db:charset # retrieve the charset for your data... rake db:collation # retrieve the collation for your da... rake db:create # Creates the databases defined in y... rake db:drop # Drops the database for your curren... ... แต่ดูเหมือนจะไม่มีตัวเลือกในการทำเช่นนี้ใน GNU ทำ เห็นได้ชัดว่ารหัสเกือบจะมีมันเป็นของปี 2007 - …

3
แอพ“ make” รู้ถึงเป้าหมายเริ่มต้นที่จะสร้างได้อย่างไรหากไม่มีการระบุเป้าหมาย
แอพ linux ส่วนใหญ่รวบรวมด้วย: make make install clean ตามที่ฉันเข้าใจแล้วใช้ชื่อของเป้าหมายการสร้างเป็นอาร์กิวเมนต์ ดังนั้นจึงinstallเป็นเป้าหมายที่คัดลอกไฟล์บางไฟล์และหลังจากนั้นcleanเป็นเป้าหมายที่ลบไฟล์ชั่วคราว แต่เป้าหมายใดที่จะmakeสร้างหากไม่มีการระบุอาร์กิวเมนต์ (เช่นคำสั่งแรกในตัวอย่างของฉัน)
188 makefile 

12
วิธีเรียกใช้ makefile ใน Windows
ฉันมีการสาธิตบางอย่างที่ฉันดาวน์โหลดและมาพร้อมกับ Makefile.win และ Makefile.sgi ฉันจะเรียกใช้สิ่งเหล่านี้ใน Windows เพื่อรวบรวมการสาธิตได้อย่างไร
187 windows  makefile 

15
คุณบังคับให้ makefile สร้างเป้าหมายใหม่ได้อย่างไร
ฉันมี makefile ที่สร้างแล้วเรียก makefile อื่น เนื่องจาก makefile นี้เรียกใช้ makefiles เพิ่มเติมที่ใช้งานได้จริง ๆ มันจึงไม่เปลี่ยน ดังนั้นจึงยังคงคิดว่าโครงการนี้ถูกสร้างขึ้นและทันสมัย dnetdev11 ~ # make make: `release' is up to date. ฉันจะบังคับให้ makefile สร้างเป้าหมายใหม่ได้อย่างไร clean = $(MAKE) -f ~/xxx/xxx_compile.workspace.mak clean build = svn up ~/xxx \ $(clean) \ ~/cbp2mak/cbp2mak -C ~/xxx ~/xxx/xxx_compile.workspace \ $(MAKE) -f ~/xxx/xxx_compile.workspace.mak $(1) \ …
184 linux  makefile 

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