Grepping Make Ausgabe

8

Wenn Sie versuchen, sehr lange Ausgaben von bestimmten Warnungen oder Fehlermeldungen zu filtern, wäre die erste Idee etwa so:

%Vor%

Das Ergebnis ist jedoch nicht vollständig zufriedenstellend. Die Ausgabe enthält nicht nur die Filterergebnisse von grep , sondern auch stdout und stderr Nachrichten von anderen Werkzeugen, die irgendwo im make Ziel verwendet werden.

Die Frage ist jetzt:

  1. Woher kommt die andere Ausgabe?
  2. Wie schreibe ich den Filterbefehl, dass die Ausgabe nur die gefilterten Zeilen enthält?
erikbwork 18.09.2013, 13:43
quelle

3 Antworten

8

Um die Fragen zu beantworten:

  1. Die Pipe verbindet nur stdout von make mit stdin von grep. make 's stderr ist immer noch mit dem Terminal verbunden und wird daher ohne Filterung ausgedruckt.
  2. Die Lösung ist connect make s stderr mit stdin und Ignoriere stdin

    %Vor%

Dies druckt nur die Ausgabe von grep, aber nichts von make oder anderen Tools wie rm .

    
erikbwork 20.09.2013, 10:18
quelle
1

Ich wollte nur die Warnungen meines Compilers sehen. Die Verwendung der stillen Option von make brachte mich dazu, wo ich wollte.

Von der make man-Seite:

%Vor%

Es gab immer noch eine große Anzahl von Compiler-Warnungen, die ich ignorieren wollte, also habe ich die CFLAGS gesetzt, als ich make

aufgerufen habe

zum Beispiel:

%Vor%

Wenn ich nur an einer bestimmten Datei oder einem bestimmten Satz von Dateien interessiert bin, verwende ich den Befehl touch gefolgt von einem stillen make.

Tippen Sie auf foo.c; make -s CFLAGS="- Wno-veraltete Deklarationen"

Ursprünglich habe ich versucht, die Ausgabe zu grep zu machen, aber es ist sauberer, still zu rufen, die Kompilierungswarnungen zu kontrollieren und Dateien zu berühren, um die Kompilierung zu begrenzen. Nach all dem könnten Sie immer noch grep verwenden, aber ich würde zuerst die Manpages des Build-Systems und des Compilers betrachten.

    
f3xy 26.04.2016 15:15
quelle
0

Schließen Sie den stderr aus:

%Vor%

Beispiel

%Vor%

Wie in den Kommentaren zu sehen ist, wird die gesamte make -Ausgabe als stderr angegeben, so dass die erste Lösung überhaupt nicht zusammenpasst. Daher ist mein Vorschlag, das folgende zu verwenden:

%Vor%

Und dann grep die make_output.log . Wie auf Wie schreibe ich stderr in eine Datei, während Sie "tee" mit einer Pipe verwenden? .

Beispiel

%Vor%     
fedorqui 18.09.2013 13:44
quelle

Tags und Links