Tôi có thể tìm danh sách mã lỗi 'tạo' ở đâu?


26

Tôi đang cố gắng biên dịch một chương trình được viết bằng Fortran bằng cách sử dụng make(Tôi có Makefile và, trong thư mục chứa Makefile , tôi gõ lệnh $ make target, trong đó "target" là một đặc tả mục tiêu dành riêng cho hệ thống có trong Makefile của tôi . thử nghiệm với các phiên bản khác nhau của thông số mục tiêu của tôi, tôi thường nhận được nhiều thông báo lỗi khi cố gắng gọi make. Để đưa ra một vài ví dụ:

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

Bạn có biết làm thế nào tôi có thể tìm thấy một danh sách các mã lỗi, chẳng hạn như "Lỗi 126" và "Lỗi 2" nghĩa là gì không? Tôi tìm thấy chủ đề này trên một trang web khác, nhưng tôi không chắc câu trả lời có nghĩa là gì. Có nghĩa là không có ý nghĩa độc lập hệ thống của các makemã lỗi? Bạn có thể giúp tôi không? Cảm ơn bạn.


Câu trả lời:


27

Các mã lỗi không xuất hiện: make đang báo cáo trạng thái trả về của lệnh bị lỗi. Bạn cần xem tài liệu của từng lệnh để biết ý nghĩa của từng giá trị. Hầu hết các lệnh không bận tâm với sự khác biệt ngoài 0 = thành công, bất cứ điều gì khác = thất bại.

Trong mỗi ví dụ của bạn, ./dppkhông thể được thực thi. Khi điều này xảy ra, shell đã cố gắng gọi nó thoát ra với mã trạng thái 126 (đây là hành vi tiêu chuẩn ). Ví dụ của make đang chạy shell đó phát hiện một lệnh thất bại (shell) và thoát ra, hiển thị cho bạn Error 126. Ví dụ về make đó tự nó là một lệnh được thực thi bởi một thể hiện cha mẹ của make và maketiện ích trả về 2 lỗi, vì vậy cha mẹ tạo báo cáo Error 2.

Sự thất bại của bản dựng của bạn có khả năng xuất phát từ test: too many arguments. Đây có thể là một lỗi cú pháp trong tệp thực hiện hoặc có thể là do dựa vào các tính năng dành riêng cho bash khi bạn /bin/shkhông có bash. Hãy thử chạy make SHELL=/bin/bash targethoặc make SHELL=/bin/ksh target; nếu điều đó không làm việc, bạn cần sửa tệp makefile của bạn.


14

Để làm rõ, Make luôn trả về một trong ba mã lỗi, như đã nêu trên gnu.org :

  • 0: Trạng thái thoát là 'Thành công'
  • 2: Lỗi gặp phải
  • 1: Trả về phản hồi cho cờ -q (câu hỏi), cho biết các mục tiêu yêu cầu cập nhật

Bạn có thể kiểm tra điều này bằng cách chạy các ví dụ của bạn ở trên (giả sử bạn vẫn có chúng từ năm 2011) và sau đó chạy echo $?trong thiết bị đầu cuối để in mã trả về trước đó.

Make sẽ in ra các mã lỗi khác mà nó gặp phải (như 126 bạn đã tìm thấy), nhưng nếu nó gặp lỗi, nó sẽ luôn trả về mã lỗi là 2.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.