it-swarm-tr.com

'Marka' hata kodlarının bir listesini nerede bulabilirim?

Fortran'da yazılmış bir programı make kullanarak derlemeye çalışıyorum ( Makefile ve Makefile , $ make target, burada "hedef" sisteme özgü bir hedef spesifikasyonudur Makefile . Hedef spesifikasyonumun çeşitli düzeltmelerini denerken, make çağrılmaya çalıştığımda genellikle çeşitli hata mesajları alıyorum. Birkaç örnek vermek gerekirse:

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

ve

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

ve

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

"Hata 126" ve "Hata 2" gibi hata kodlarının bir listesini nasıl bulabileceğimi biliyor musunuz? Başka bir web sitesinde bu kon buldum, ancak cevabın ne anlama geldiğinden emin değilim. Bu, make hata kodlarının sistemden bağımsız bir anlamı olmadığı anlamına mı geliyor? Lütfen bana yardım edebilir misin? Teşekkür ederim.

27
Andrew

Hata kodları make'den değil: make başarısız olan komutun dönüş durumunu bildiriyor. Her durum değerinin ne anlama geldiğini bilmek için her komutun belgelerine bakmanız gerekir. Çoğu komut 0 = başarı, başka bir şey = başarısızlık dışında ayrımlarla uğraşmaz.

Örneklerinizin her birinde ./dpp Yürütülemez. Bu olduğunda, çağırmaya çalışan Kabuk, durum kodu 126 ile çıkar (bu standart davranış ). Shell'in çalışmakta olduğu make örneği başarısız bir komut (Shell) algılar ve çıkar ve size Error 126 Gösterir. Bu make örneği, make'in üst örneği tarafından yürütülen bir komuttur ve make yardımcı programı hata durumunda 2 değerini döndürür, bu nedenle üst raporlar Error 2 Yapar.

Yapınızın başarısız olması büyük olasılıkla test: too many arguments Kaynaklıdır. Bu, makefile'da bir sözdizimi hatası olabilir veya bash olmayan bir /bin/sh Sürümüne sahip olduğunuzda bash'a özgü özelliklere güvenmek olabilir. make Shell=/bin/bash target Veya make Shell=/bin/ksh target Çalıştırmayı deneyin; Bu işe yaramazsa, makefile'ınızı düzeltmeniz gerekir.

Açıklığa kavuşturmak için, Make her zaman gnu.org adresinde belirtildiği gibi üç hata kodundan birini döndürür:

  • 0: Çıkış durumu 'Başarılı'
  • 2: Karşılaşılan Hataları Yapma
  • 1: Hedeflerin güncellenmesi gerektiğini belirten -q (soru) bayrağına dönüş yanıtı

Yukarıdaki örnekleri çalıştırarak (2011'den beri hala var olduğunu varsayarak) ve ardından echo $? önceki uç kodunu yazdırmak için terminalde.

Make, karşılaştığı diğer hata kodlarını yazdıracaktır (bulduğunuz 126 gibi), ancak bir hata ile karşılaşırsa her zaman 2 hata kodunu döndürür.

15
Timothy Clifford