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

26

Saya mencoba untuk mengkompilasi program yang ditulis dalam Fortran menggunakan make(saya punya Makefile dan, sementara di direktori yang berisi Makefile , saya mengetik perintah $ make target, di mana "target" adalah spesifikasi target sistem-spesifik hadir di Makefile saya . Seperti yang 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 utas ini di situs web lain, tetapi saya tidak yakin apa artinya balasan itu. Apakah ini berarti bahwa tidak ada arti makekode-kesalahan yang tidak tergantung sistem ? Bisakah kamu menolongku? Terima kasih.

Andrew
sumber

Jawaban:

27

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, ./dpptidak dapat dijalankan. Ketika ini terjadi, shell yang mencoba menjalankannya keluar dengan kode status 126 (ini adalah perilaku standar ). Contoh make yang menjalankan shell itu mendeteksi perintah yang gagal (shell) dan keluar, menunjukkan Anda Error 126. Instance make itu sendiri merupakan perintah yang dijalankan oleh instance buatan parent, dan makeutilitas mengembalikan 2 pada error, sehingga induk membuat laporan Error 2.

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

Gilles 'SANGAT berhenti menjadi jahat'
sumber
14

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 berjalan 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.

Timothy Clifford
sumber