it-swarm.com.de

Wo finde ich eine Liste mit Fehlercodes?

Ich versuche ein in Fortran geschriebenes Programm mit make zu kompilieren (ich habe ein Makefile und, während ich mich in dem Verzeichnis befinde, das das Makefile, Ich tippe den Befehl $ make target, wobei "target" eine systemspezifische Zielspezifikation ist, ist in meinem Makefile vorhanden. Wenn ich mit verschiedenen Revisionen meiner Zielspezifikation experimentiere, erhalte ich häufig verschiedene Fehlermeldungen, wenn ich versuche, make aufzurufen. Um einige Beispiele zu nennen:

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

und

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

und

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

Wissen Sie, wie ich eine Liste der Fehlercodes wie "Fehler 126" und "Fehler 2" finden kann? Ich habe diesen Thread auf einer anderen Website gefunden, bin mir aber nicht sicher, was die Antwort bedeutet. Bedeutet dies, dass die Fehlercodes make keine systemunabhängige Bedeutung haben? Kannst du mir bitte helfen? Vielen Dank.

27
Andrew

Die Fehlercodes stammen nicht von make: make meldet den Rückgabestatus des fehlgeschlagenen Befehls. Sie müssen sich die Dokumentation jedes Befehls ansehen, um zu wissen, was jeder Statuswert bedeutet. Die meisten Befehle beschäftigen sich nicht mit anderen Unterscheidungen als 0 = Erfolg, alles andere = Misserfolg.

In jedem Ihrer Beispiele kann ./dpp Nicht ausgeführt werden. In diesem Fall wird die Shell, die versucht hat, sie aufzurufen, mit dem Statuscode 126 beendet (dies ist Standardverhalten ). Die Instanz von make, die ausgeführt wurde, dass Shell einen fehlgeschlagenen Befehl (die Shell) erkennt und beendet, zeigt Ihnen Error 126. Diese Instanz von make ist selbst ein Befehl, der von einer übergeordneten Instanz von make ausgeführt wird, und das Dienstprogramm make gibt bei einem Fehler 2 zurück, sodass die übergeordnete make-Berichte Error 2.

Der Fehler Ihres Builds ist wahrscheinlich auf test: too many arguments Zurückzuführen. Dies kann ein Syntaxfehler im Makefile sein oder darauf, dass Sie sich auf bash-spezifische Funktionen verlassen, wenn Sie einen /bin/sh Haben, der nicht bash ist. Versuchen Sie, make Shell=/bin/bash target Oder make Shell=/bin/ksh target Auszuführen. Wenn das nicht funktioniert, müssen Sie Ihr Makefile reparieren.

Zur Verdeutlichung gibt Make immer einen von drei Fehlercodes zurück, wie auf gnu.org angegeben:

  • 0: Der Beendigungsstatus lautet "Erfolgreich".
  • 2: Fehler festgestellt
  • 1: Antwort auf das Flag -q (Frage) zurückgeben, um anzuzeigen, dass Ziele aktualisiert werden müssen

Sie können dies testen, indem Sie die obigen Beispiele ausführen (vorausgesetzt, Sie haben sie noch ab 2011) und dann echo $? im Terminal, um den vorherigen Rückkehrcode zu drucken.

Make druckt andere Fehlercodes aus, auf die es stößt (wie die 126, die Sie gefunden haben). Wenn jedoch ein Fehler auftritt, wird immer der Fehlercode 2 zurückgegeben.

15