Wie überprüfe Rückgabewert der shell-Richtlinie
In meinem Makefile habe ich testen müssen, wenn das aktuelle Verzeichnis ein SVN-repo ist oder nicht, und wenn es nicht ist, möchte ich darauf hinweisen, einen Fehler mit der $(Fehler) - Direktive in der Datei Makefile.
So, ich Plane, verwenden Sie den Rückgabewert von $(shell-svn-info .) aber ich bin mir nicht sicher, wie man diesen Wert aus der Datei Makefile.
Hinweis: ich bin nicht versuchen, den Rückgabewert in ein Rezept, sondern eher in der Mitte der Makefile.
Momentan bin ich etwas wie das zu tun, und das funktioniert nur, weil stdout leer ist, wenn es einen Fehler:
SVN_INFO := $(shell svn info . 2> /dev/null)
ifeq ($(SVN_INFO),)
$(error "Not an SVN repo...")
endif
Ich würde noch gerne herausfinden, ob es möglich ist, um die Rückkehr Wert, anstatt in der Datei Makefile.
InformationsquelleAutor der Frage Tuxdude | 2011-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie über die Verwendung
$?
echo der exit-status des letzten Befehls?InformationsquelleAutor der Antwort eriktous
Dies funktionierte gut für mich - basierend auf dem @eriktous' Antwort mit einer geringfügigen änderung der Umleitung von stdout als auch zum überspringen Sie die Ausgabe von svn info auf eine gültige svn-repo.
InformationsquelleAutor der Antwort Tuxdude
Vielleicht so etwas?
InformationsquelleAutor der Antwort Roland Illig
Wenn Sie wollen, um die Erhaltung der original-Ausgabe, dann müssen Sie zu tun, einige tricks. Wenn Sie Glück genug, um GNU Make 4.2 (veröffentlicht am 2016-05-22) oder höher zur Verfügung, die Sie verwenden können, die
.SHELLSTATUS
variable wie folgt.Alternativ könnte man eine temporäre Datei oder spielen Sie mit Make -
eval
zum speichern der Zeichenfolge und/oder der exit-code in eine variable. Im Beispiel unten wird das gemacht, aber ich würde sicherlich gerne sehen, dass eine bessere Umsetzung als diese peinlich komplizierte version.InformationsquelleAutor der Antwort stefanct
Ich benutze ein paar Funktionen:
Diese kann dann aufgerufen werden, etwa so:
InformationsquelleAutor der Antwort Britton Kerin