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ß.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top