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 make
kode-kesalahan yang tidak tergantung sistem ? Bisakah kamu menolongku? Terima kasih.
sumber
Jawaban:
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 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 AndaError 126
. Instance make itu sendiri merupakan perintah yang dijalankan oleh instance buatan parent, danmake
utilitas mengembalikan 2 pada error, sehingga induk membuat laporanError 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/sh
yang bukan bash. Coba jalankanmake SHELL=/bin/bash target
ataumake SHELL=/bin/ksh target
; jika itu tidak berhasil, Anda harus memperbaiki makefile Anda.sumber
Untuk memperjelas, Buat selalu mengembalikan salah satu dari tiga kode kesalahan, sebagaimana dinyatakan pada gnu.org :
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.
sumber