it-swarm-vi.com

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

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ó a Makefile và, trong khi 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 my Makefile. Khi tôi thử nghiệm các phiên bản khác nhau của đặc tả mục tiêu của mình, 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ì. Điều đó có nghĩa là không có ý nghĩa độc lập với hệ thống của mã lỗi make? Bạn có thể giúp tôi không? Cảm ơn bạn.

27
Andrew

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, ./dpp khô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ụ về việc thực hiện đang chạy mà 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 đó là một lệnh được thực thi bởi một thể hiện cha mẹ của make và tiện ích make 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ó thể 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 có /bin/sh đó không phải là bash. Hãy thử chạy make Shell=/bin/bash target hoặc là 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.

Để 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.

15
Timothy Clifford