it-swarm.it

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

Sto cercando di compilare un programma scritto in Fortran usando make (ho un Makefile e, mentre nella directory che contiene il Makefile , digito il comando $ make target, dove "target" è una specifica di destinazione specifica del sistema presente nel mio Makefile . Mentre esperimento con varie revisioni della mia specifica di destinazione, ricevo spesso vari messaggi di errore quando provo a chiamare 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 codici di errore make? Potete per favore aiutarmi? Grazie.

27
Andrew

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, ./dpp non può essere eseguito. Quando ciò accade, Shell che ha tentato di invocarlo esce con il codice di stato 126 (questo è comportamento standard ). L'istanza di make in esecuzione che Shell rileva un comando non riuscito (Shell) ed esce, mostrandoti Error 126. Quell'istanza di make è essa stessa un comando eseguito da un'istanza parent di make, e l'utilità make restituisce 2 in caso di errore, quindi il parent crea report Error 2.

È probabile che il fallimento della tua build derivi da 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 ha un /bin/sh che non è bash. Prova a eseguire make Shell=/bin/bash target o make Shell=/bin/ksh target; se non funziona, devi correggere il tuo makefile.

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

15
Timothy Clifford