Wo finde ich eine Liste mit Marken-Fehlercodes?


26

Ich versuche , ein Programm in Fortran geschrieben zu kompilieren mit make(ich habe ein Makefile und, während sie in dem Verzeichnis mit der enthält Makefile , ich den Befehl $ make target, in dem „Ziel“ ist eine systemspezifische Zielspezifikation in meiner Gegenwart ist Makefile . Wie ich Wenn ich mit verschiedenen Revisionen meiner Zielspezifikation experimentiere, erhalte ich beim Versuch, einen Anruf makezu tätigen , häufig eine Reihe von Fehlermeldungen .

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 finden kann, z. B. "Fehler 126" und "Fehler 2"? Ich habe diesen Thread auf einer anderen Website gefunden, bin mir aber nicht sicher, was die Antwort bedeutet. Bedeutet dies, dass die makeFehlercodes keine systemunabhängige Bedeutung haben ? Kannst du mir bitte helfen? Vielen Dank.


Antworten:


27

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 stören sich nicht an anderen Unterschieden als 0 = Erfolg, alles andere = Misserfolg.

./dppKann in jedem Ihrer Beispiele nicht ausgeführt werden. In diesem Fall wird die Shell, die versucht hat, sie aufzurufen, mit dem Statuscode 126 beendet (dies ist das Standardverhalten ). Die Instanz von make, die in dieser Shell ausgeführt wurde, erkennt einen fehlgeschlagenen Befehl (die Shell) und wird beendet Error 126. Diese Instanz von make ist selbst ein Befehl, der von einer übergeordneten Instanz von make ausgeführt wird, und das makeDienstprogramm gibt im Fehlerfall 2 zurück, sodass die übergeordnete Instanz make Berichte erstellt Error 2.

Das Versagen Ihres Builds ist wahrscheinlich darauf zurückzuführen test: too many arguments. Dies kann ein Syntaxfehler im Makefile sein oder daran, dass Sie sich auf bash-spezifische Funktionen verlassen, wenn Sie eine haben /bin/sh, die nicht bash ist. Versuchen Sie es mit make SHELL=/bin/bash targetoder make SHELL=/bin/ksh target; Wenn das nicht funktioniert, müssen Sie Ihr Makefile reparieren.


14

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

  • 0: Beendigungsstatus ist 'Erfolgreich'
  • 2: Machen Sie aufgetretene Fehler
  • 1: Rückgabe der Antwort an das Flag -q (Frage), um anzuzeigen, dass die Ziele aktualisiert werden müssen

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

Make druckt andere Fehlercodes aus (wie die 126, die Sie gefunden haben), aber wenn ein Fehler auftritt, wird immer der Fehlercode 2 zurückgegeben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.