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 make
zu 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 make
Fehlercodes keine systemunabhängige Bedeutung haben ? Kannst du mir bitte helfen? Vielen Dank.
quelle
Antworten:
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.
./dpp
Kann 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 beendetError 126
. Diese Instanz von make ist selbst ein Befehl, der von einer übergeordneten Instanz von make ausgeführt wird, und dasmake
Dienstprogramm gibt im Fehlerfall 2 zurück, sodass die übergeordnete Instanz make Berichte erstelltError 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 mitmake SHELL=/bin/bash target
odermake SHELL=/bin/ksh target
; Wenn das nicht funktioniert, müssen Sie Ihr Makefile reparieren.quelle
Zur Verdeutlichung gibt Make immer einen von drei Fehlercodes zurück, wie auf gnu.org angegeben :
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.
quelle