ฉันจะหารายการรหัสข้อผิดพลาด 'ทำ' ได้จากที่ใด


26

ฉันพยายามรวบรวมโปรแกรมที่เขียนใน 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 many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer'-I/opt/mpich_intel/include  angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory 
make: *** [mpich-c2] Error 2

และ

make[1]: Entering directory 
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer' -I/opt/mpich_intel/include  angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory 
make: *** [mpi-intel] Error 2

คุณรู้หรือไม่ว่าฉันสามารถค้นหารายการรหัสข้อผิดพลาดเช่น "ข้อผิดพลาด 126" และ "ข้อผิดพลาด 2" หมายถึงอะไร ฉันพบกระทู้นี้ในเว็บไซต์อื่น แต่ฉันไม่แน่ใจว่าคำตอบหมายถึงอะไร มันหมายความว่าไม่มีความหมายที่เป็นอิสระจากระบบของmakeรหัสข้อผิดพลาด? คุณช่วยฉันได้ไหม? ขอขอบคุณ.


opussoftware.com/manual/appendices/B1.htmมีรายการ ...
Wilf

คำตอบ:


27

รหัสข้อผิดพลาดไม่ได้มาจาก make: make กำลังรายงานสถานะการส่งคืนของคำสั่งที่ล้มเหลว คุณต้องดูเอกสารประกอบของแต่ละคำสั่งเพื่อทราบความหมายของแต่ละค่าสถานะ คำสั่งส่วนใหญ่ไม่สนใจความแตกต่างอื่น ๆ นอกเหนือจาก 0 = ความสำเร็จสิ่งอื่น ๆ = ความล้มเหลว

ในตัวอย่างของคุณ./dppไม่สามารถดำเนินการได้ เมื่อสิ่งนี้เกิดขึ้นเชลล์ที่พยายามเรียกใช้จะออกด้วยรหัสสถานะ 126 (นี่เป็นลักษณะการทำงานมาตรฐาน ) ตัวอย่างของการแต่งหน้าที่ถูกเรียกใช้เปลือกที่ตรวจพบคำสั่งล้มเหลว (เปลือก) Error 126และออกแสดงให้คุณเห็น ตัวอย่างของการให้ที่เป็นตัวเองคำสั่งดำเนินการโดยอินสแตนซ์แม่ของยี่ห้อและmakeยูทิลิตี้ส่งกลับ 2 Error 2ในข้อผิดพลาดจึงรายงานผู้ปกครองให้

test: too many argumentsความล้มเหลวของการสร้างของคุณมีแนวโน้มที่จะเกิดจากการ นี่อาจเป็นข้อผิดพลาดทางไวยากรณ์ใน makefile หรืออาจเป็นเพราะการใช้คุณสมบัติเฉพาะของ bash เมื่อคุณมี/bin/shที่ไม่ใช่ bash ลองใช้make SHELL=/bin/bash targetหรือmake SHELL=/bin/ksh target; หากไม่ได้ผลคุณจะต้องแก้ไข makefile ของคุณ


14

หากต้องการชี้แจงให้ Make ส่งคืนรหัสข้อผิดพลาดหนึ่งในสามข้อตามที่ระบุในgnu.org :

  • 0: สถานะการออกคือ 'สำเร็จ'
  • 2: สร้างข้อผิดพลาดที่พบ
  • 1: ส่งคืนการตอบกลับไปยังแฟล็ก -q (คำถาม) เพื่อระบุว่าเป้าหมายต้องการการอัปเดต

คุณสามารถทดสอบสิ่งนี้ได้โดยเรียกใช้ตัวอย่างของคุณด้านบน (สมมติว่าคุณยังมีพวกเขาอยู่ตั้งแต่ 2011) จากนั้นเรียกใช้echo $?ในเครื่องเพื่อพิมพ์รหัสส่งคืนก่อนหน้า

ทำให้จะพิมพ์รหัสข้อผิดพลาดอื่น ๆ ที่พบ (เช่น 126 คุณพบ) แต่หากพบข้อผิดพลาดมันจะกลับรหัสข้อผิดพลาด 2

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