Dove posso trovare un elenco di codici di errore "make"?


26

Sto cercando di compilare un programma scritto in Fortran usando make(Ho un Makefile e, mentre nella directory contenente il Makefile , digito il comando $ make target, dove "target" è una specifica di destinazione specifica del sistema presente nel mio Makefile . esperimento con varie revisioni della mia specifica di destinazione, quando tento di chiamare ricevo spesso una varietà di messaggi di errore make. Per fare alcuni esempi:

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

e

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

e

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

Sai come posso trovare un elenco di cosa significano i codici di errore, come "Errore 126" e "Errore 2"? Ho trovato questa discussione su un altro sito web, ma non sono sicuro del significato della risposta. Significa che non esiste un significato indipendente dal sistema dei makecodici di errore? Potete per favore aiutarmi? Grazie.


Risposte:


27

I codici di errore non sono di make: make sta riportando lo stato di ritorno del comando non riuscito. È necessario consultare la documentazione di ciascun comando per sapere cosa significa ogni valore di stato. La maggior parte dei comandi non si preoccupa di distinzioni diverse da 0 = successo, qualsiasi altra cosa = fallimento.

In ciascuno dei tuoi esempi, ./dppnon può essere eseguito. Quando ciò accade, la shell che ha tentato di invocarlo esce con il codice di stato 126 (questo è un comportamento standard ). L'istanza di make che stava eseguendo quella shell rileva un comando non riuscito (la shell) ed esce, mostrandoti Error 126. Quell'istanza di make è essa stessa un comando eseguito da un'istanza parent di make, e l' makeutility restituisce 2 in caso di errore, quindi il parent crea report Error 2.

È probabile che il fallimento della tua build derivi test: too many arguments. Questo potrebbe essere un errore di sintassi nel makefile o potrebbe essere dovuto al fatto di fare affidamento su funzionalità specifiche di bash quando si dispone di un /bin/shparametro che non è bash. Prova a correre make SHELL=/bin/bash targeto make SHELL=/bin/ksh target; se non funziona, devi correggere il tuo makefile.


14

Per chiarire, Make restituisce sempre uno dei tre codici di errore, come indicato su gnu.org :

  • 0: lo stato di uscita è "riuscito"
  • 2: commetti errori riscontrati
  • 1: restituisce la risposta al flag -q (domanda), indicando che le destinazioni devono essere aggiornate

Puoi verificarlo eseguendo i tuoi esempi sopra (supponendo che tu li abbia ancora dal 2011) e quindi eseguendo echo $?nel terminale per stampare il codice di ritorno precedente.

Make stamperà altri codici di errore che incontra (come il 126 che hai trovato), ma se si imbatte in un errore restituirà sempre un codice di errore di 2.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.