Immer Ruhig Machen, auf der echo-Befehl Linien auf Fehler
Frage
Ich habe ein Makefile Gebäude viele C-Dateien mit lange Befehlszeilen und wir haben es bereinigt die Ausgabe, indem er Regeln, wie:
.c${MT}.doj:
@echo "Compiling $<";\
$(COMPILER) $(COPTS) -c -o $@ $<
Nun, das ist großartig, wie das @ unterdrückt die Zusammenstellung Linie emittiert werden.Aber wenn wir einen Fehler erhalten haben, erhalten wir die Fehlermeldung, kein Befehl-Linie.Kann jemand denken, der eine "saubere" Weg, um zu emittieren die Befehlszeile?Alle, die ich denken kann, zu tun, hallte es in einer Datei und haben eine höhere Ebene, machen den Fehler abzufangen und Katze die Datei.Hacky ich weiß.
Lösung
Geprüft und es funktioniert (GNU in Linux machen):
.c${MT}.doj:
@echo "Compiling $<";\
$(COMPILER) $(COPTS) -c -o $@ $< \
|| echo "Error in command: $(COMPILER) $(COPTS) -c -o $@ $<" \
&& false
Andere Tipps
Diese Frage ist ziemlich alt, aber für diejenigen von Ihnen Googeln, ich denke, was ich tun werde, ist in dieser situation alias make
zu make -s
(silent-Modus) in meiner shell, und nur die @
Präfix vor Zeilen, in denen echo
oder andere Diagnose-Befehle aufgerufen.Wenn ich möchte, dass die volle Leistung von make
, Ich überschreiben mein alias, wenn Sie ihn als \make
.
Beachten Sie auch, dass in dieser situation, dass Sie benötigen, zu tun, die typische Sache, und setzen Sie die @echo
auf einer eigenen Zeile steht, mit der tatsächlichen Herrschaft über die Befehle auf separaten Linien und ohne @
's.
Eine einfache Lösung wäre, ein einfaches Skript abc
wie folgt zu verwenden:
#!/bin/bash
$@
code=$?
if (( code )); then
echo error running $@
fi
exit $code
Dann können Sie abc $(COMPILER) $(COPTS) -c -o $@ $<
in Ihrem Makefile
schreiben. Sie beachten, dass dies nicht, wenn Sie Rohre oder Umleitungen haben nicht funktioniert (wie sie angewendet werden, werden Sie anstelle des Befehls abc
ausgeführt werden soll).
Sie können auch direkt einen ähnlichen Code in der Makefile
setzen nur wenn das bevorzugt.
Ich habe vor kurzem ein Programm namens logtext für Größen wie Tracking, was Ausgabe während aufgetreten war der Verlauf einer bAT-Datei ausgeführt wird. Check it out, können Sie diese finden ziemlich nützlich, wenn Sie wissen wollen, welche Fehler aufgetreten ist, wo.