'Make' hata kodlarının listesini nereden bulabilirim?


26

Fortran'da yazılmış bir programı derlemeye çalışıyorum make( Makefile'im var ve Makefile'ı içeren dizindeyken komutu yazın $ make target, burada "target" Makefile'imde sisteme özgü bir hedef belirtimi var) . Hedef şartnamemin değişik revizyonlarını denemek için, aramaya çalıştığımda sık sık çeşitli hata mesajları alıyorum make.

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 ne anlama geldiğini nasıl bulabileceğimi biliyor musunuz? Bu konuyu başka bir web sitesinde buldum , ancak cevabın ne anlama geldiğinden emin değilim. makeHata 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.


Yanıtlar:


27

Hata kodları make'den değil: make, başarısız olan komutun dönüş durumunu rapor ediyor. Her durum değerinin ne anlama geldiğini bilmek için her komutun belgelerine bakmanız gerekir. Komutların çoğu, 0 = basaridan baska, baska bir sey = basarisiz olan farklardan öteye geçmez.

Örneklerin her birinde ./dppyürütülemez. Bu olduğunda, onu çağırmaya çalışan kabuk, durum kodu 126 ile çıkar (bu standart davranıştır ). Bu kabuğu çalıştıran make örneği başarısız bir komutu (kabuk) algılar ve sizi gösterir Error 126. Make örneğinin kendisi, bir make örneği örneği tarafından yürütülen bir komuttur ve makeyardımcı program hatayla 2 döndürür, böylece ebeveyn rapor yapar Error 2.

Yapınızın başarısızlığından kaynaklanması muhtemeldir test: too many arguments. Bu, makefile içindeki bir sözdizimi hatası olabilir ya da bash /bin/sholmayan bir özelliğe sahip olduğunuzda bash'a özgü özelliklere bağlı olabilir . Koşmayı deneyin make SHELL=/bin/bash targetveya make SHELL=/bin/ksh target; Bu işe yaramazsa, makefile düzeltmeniz gerekir.


14

Netleştirmek için, Make, her zaman, gnu.org'da belirtildiği gibi üç hata kodundan birini döndürür :

  • 0: Çıkış durumu 'Başarılı'
  • 2: Karşılaşılan Hata Yap
  • 1: -q (soru) bayrağına geri dönüş, hedeflerin güncellenmesi gerektiğini belirtir

Bunu, yukarıdaki örneklerinizi çalıştırarak (2011'den hala almış olduğunuz varsayılarak) ve ardından echo $?önceki dönüş kodunu yazdırmak için terminalde çalıştırarak test edebilirsiniz .

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.