sagen, 'machen' zu ignorieren, Abhängigkeiten, wenn das top-Ziel erstellt wurde
Ich bin mit der folgenden Art pipeline:
digestA: hugefileB hugefileC
cat $^ > $@
rm $^
hugefileB:
touch $@
hugefileC:
touch $@
Ziele hugefileB und hugefileC sind sehr groß und nehmen eine lange Zeit zu berechnen (und brauchen die macht von Machen). Aber sobald digestA erstellt wurde, gibt es keine Notwendigkeit zu halten Ihre Abhängigkeiten: es löscht diese Abhängigkeiten, um Speicherplatz freizugeben.
Nun, wenn ich rufe 'make' wieder, hugefileB und hugefileC umgebaut werden, in der Erwägung, dass digestA ist schon ok.
Gibt es eine Möglichkeit zu sagen, 'machen' zu vermeiden, zu re-comile die Abhängigkeiten ?
HINWEIS: ich will nicht bauen, die zwei Abhängigkeiten innerhalb der Regeln für die 'digestA'.
- Sie neu erstellen möchten
digestA
nur, wenn es nicht bereits vorhanden ist, ist das richtig? - neu erstellen möchten, digestA nur, wenn es nicht bereits vorhanden ist": ja
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden "temporäre Dateien" - feature von GNU-Make:
So, das hinzufügen der folgenden Zeile in das Makefile sollte reichen:
Aufruf machen für die erste Zeit:
Und das nächste mal:
.SECONDARY
mit keine Voraussetzungen bewirkt, dass alle Ziele so behandelt werden, als sekundäre (D. H., kein Ziel wird entfernt, da es als Zwischenprodukt)." Aber es funktioniert nicht sagen, nichts über die Gründe hinter dem default-Verhalten.Wenn Sie daneben
hugefileB
undhugefileC
als intermediate-Dateien, erhalten Sie das von Ihnen gewünschte Verhalten:Beispiel:
Beachten Sie, dass Sie brauchen nicht die explizite
rm $^
Befehl mehr-gmake automatisch löscht temporäre Dateien am Ende der build.Ich würde empfehlen, Sie zu schaffen pseudo-cache-Dateien, die erstellt werden, durch die
hugefileB
undhugeFileC
Ziele.Dann haben
digestA
hängen von den cache-Dateien, weil Sie wissen, Sie werden sich nicht ändern wieder, bis Sie Sie manuell aufrufen, die teure Ziele.Dem richtigen Weg ist, um nicht die Dateien löschen, wie löscht die Informationen, die
make
verwendet, um zu bestimmen, ob neu erstellen der Dateien.Diese anschließend im leeren hilft da nicht, denn
make
wird dann annehmen, dass der leere Dateien sind voll unterkellert.Wenn es einen Weg gibt, zu verschmelzen verdaut, dann könnten Sie von jedem der riesige Dateien, die dann gehalten, und die riesige Datei automatisch entfernt, da ist es ein Zwischenprodukt.