it-swarm-id.com

Di mana saya dapat menemukan daftar kode kesalahan 'make'?

Saya mencoba mengkompilasi program yang ditulis dalam Fortran menggunakan make (Saya punya Makefile dan, sementara di direktori yang berisi Makefile , saya ketik perintah $ make target, di mana "target" adalah spesifikasi target spesifik sistem terdapat di Makefile saya . Ketika saya bereksperimen dengan berbagai revisi spesifikasi target saya, saya sering mendapatkan berbagai pesan kesalahan ketika mencoba menelepon make. Untuk memberikan beberapa contoh:

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

dan

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

dan

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

Apakah Anda tahu bagaimana saya dapat menemukan daftar apa yang dimaksud kode kesalahan, seperti "Kesalahan 126" dan "Kesalahan 2,"? Saya menemukan tas ini di situs web lain, tetapi saya tidak yakin apa artinya balasan itu. Apakah ini berarti bahwa tidak ada arti sistem-independen dari kode kesalahan make? Bisakah kamu membantuku? Terima kasih.

27
Andrew

Kode kesalahan bukan dari make: make melaporkan status pengembalian dari perintah yang gagal. Anda perlu melihat dokumentasi setiap perintah untuk mengetahui apa arti setiap nilai status. Sebagian besar perintah tidak peduli dengan perbedaan selain 0 = sukses, apa pun = kegagalan.

Dalam setiap contoh Anda, ./dpp tidak dapat dieksekusi. Ketika ini terjadi, Shell yang mencoba menjalankannya keluar dengan kode status 126 (ini perilaku standar ). Contoh make yang sedang berjalan yang Shell mendeteksi perintah yang gagal (Shell) dan keluar, menunjukkan Anda Error 126. Instance make itu sendiri adalah sebuah perintah yang dijalankan oleh instance buatan parent, dan utilitas make mengembalikan 2 pada error, jadi induk membuat laporan Error 2.

Kegagalan bangunan Anda kemungkinan berasal dari test: too many arguments. Ini bisa jadi kesalahan sintaksis di makefile, atau bisa juga karena mengandalkan fitur spesifik bash ketika Anda memiliki /bin/sh itu bukan bash. Coba jalankan make Shell=/bin/bash target atau make Shell=/bin/ksh target; jika itu tidak berhasil, Anda harus memperbaiki makefile Anda.

Untuk memperjelas, Buat selalu mengembalikan salah satu dari tiga kode kesalahan, sebagaimana dinyatakan pada gnu.org :

  • 0: Status keluar adalah 'Berhasil'
  • 2: Membuat Kesalahan yang Dihadapi
  • 1: Kembalikan respons ke tanda -q (pertanyaan), yang menunjukkan bahwa target memerlukan pembaruan

Anda dapat menguji ini dengan menjalankan contoh Anda di atas (dengan asumsi Anda masih memilikinya dari 2011) dan kemudian menjalankan echo $? di terminal untuk mencetak kode pengembalian sebelumnya.

Make akan mencetak kode kesalahan lain yang dihadapinya (seperti 126 yang Anda temukan), tetapi jika mengalami kesalahan maka akan selalu mengembalikan kode kesalahan 2.

15
Timothy Clifford