Unterdrückt die Ausgabe von Regelfehlern

9

Ich habe eine Regel, die ein Verzeichnis erstellt

%Vor%

Aber nach dem ersten Mal, dass das Verzeichnis generiert wurde, erhalte ich folgende Ausgabe:

%Vor%

Gibt es eine Möglichkeit, die Regel nur auszuführen, wenn das Verzeichnis nicht existiert, oder die Ausgabe zu unterdrücken, wenn das Verzeichnis bereits existiert?

    
Matt Joiner 13.08.2010, 13:46
quelle

6 Antworten

8

Die traditionelle Methode zur Erstellung von Verzeichnissen besteht darin, eine Stempeldatei zu verwenden, von der abhängig ist, und das Verzeichnis als Nebeneffekt zu erstellen. Entfernen Sie die Stempeldatei, wenn Sie distclean oder was auch immer Ihr "wirklich sauberes" Ziel ist:

%Vor%

Der Grund dafür ist wie folgt: Immer wenn eine Datei in bin erstellt / entfernt wird, wird die mtime des enthaltenden Verzeichnisses aktualisiert. Wenn ein Ziel von bin abhängig ist, wird das nächste Mal, wenn make ausgeführt wird, Dateien neu erstellen, die es nicht benötigt.

    
Jack Kelly 24.08.2010, 07:48
quelle
14

Eine andere Möglichkeit, die Ausgabe make: error ... (ignored) zu unterdrücken, besteht darin, || true an einen Befehl anzuhängen, der fehlschlagen könnte. Beispiel mit grep, das nach Fehlern in einer LaTeX-Protokolldatei sucht:

%Vor%

Ohne die || true , meckern Sie, wenn grep keine Übereinstimmung findet.

Dies funktioniert für alle Befehle, nicht nur für mkdir; Deshalb habe ich diese Antwort hinzugefügt.

    
daniel kullmann 16.04.2012 08:17
quelle
8

Der Fehler wird bereits von der führenden ' - ' in der Befehlszeile ignoriert. Wenn Sie die Fehlermeldungen von mkdir wirklich verlieren möchten, verwenden Sie die I / O-Umleitung:

%Vor%

Sie erhalten jedoch immer noch die Warnung 'ignored' von make . Daher ist es möglicherweise besser, die Option mkdir zu verwenden, die nicht zu einem Fehler führt, wenn das Ziel bereits vorhanden ist. Option co_de%:

%Vor%

Die Option -p erzeugt tatsächlich alle Verzeichnisse, die auf den angegebenen Pfaden fehlen, so dass sie eine Anzahl von Verzeichnissen in einem Aufruf erzeugen kann, aber ein Nebeneffekt ist, dass sie keinen Fehler für bereits existierende Verzeichnisse erzeugt . Dies setzt eine POSIX-ische Implementierung von -p voraus; ältere Maschinen unterstützen es möglicherweise nicht (obwohl es seit langem Standard ist).

    
Jonathan Leffler 13.08.2010 13:57
quelle
0

Nun, ich endete mit diesem Konstrukt, vielleicht wird jemand es nützlich finden oder kann es kommentieren:

%Vor%     
Matt Joiner 14.08.2010 01:26
quelle
0

Ihre Regel sollte nicht ausgeführt werden, es sei denn, ihr Ziel existiert nicht oder ist aufgrund ihrer Abhängigkeiten veraltet. Mit anderen Worten, Sie sollten nie auf diesen Fehler stoßen.

[Beispiel hinzugefügt]

%Vor%

Hängt Ihr Ordner von irgendetwas ab? Ist Ihr Ordner ein falsches Ziel?

    
Maxim Egorushkin 13.08.2010 14:12
quelle
0

Make nimmt an, dass das erste Ziel das Standardziel ist. Wenn das Ihr komplettes Makefile ist, dann muss es immer versuchen, das Standardziel, das Bin, neu zu erstellen. Fügen Sie die folgenden Zeilen an den Anfang Ihres Makefile ein:

%Vor%     
Maxim Egorushkin 20.08.2010 16:26
quelle

Tags und Links