Brauchen Sie eine makefile-Regel, dass die Abhängigkeit behandeln können fehlende Dateien
Wir verwenden GNU Make für unser system. Am Ende unseres makefiles, wir haben ein include namens Makedepends das generiert einen Haufen .d Dateien mit -MM-Schalter auf gcc. Wir fügen Sie dann die .d-Datei für jede .cc-Datei über ein include $(CXXFILES:.cc=.d) Linie. Aber wenn wir eine Datei löschen oder verschieben Sie die Dateien, die Abhängigkeiten Schritt bricht und wir haben manuell zu löschen .d Dateien (auch ein make clean funktioniert nicht, da die Abhängigkeiten nicht)
Gibt es eine Möglichkeit zu erzeugen, diese Abhängigkeit .d Dateien oder enthalten diese Abhängigkeit .d Dateien, die ordnungsgemäß zu behandeln eine Datei löschen oder Umzug?
EDIT: Zum Beispiel: ich habe serial.cc und die makefiles generieren einer serial.d-Datei, die eine Abhängigkeit von Puffer.h aber dann ändere ich es, so brauche ich nicht Puffer.h mehr und ich lösche Puffer.h. Nächstes mal, wenn ich make ausführe, wird es ersticken, weil es den .d-Datei, die macht immer noch Seriell.o hängt Puffer.h.
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://make.mad-scientist.net/papers/advanced-auto-dependency-generation hat eine Beschreibung genau dieses problem, und ein paar Möglichkeiten um ihn herum. Das erste ist ein bisschen falsch, aber die "advanced" im wesentlichen vor Ort auf.
Zwei Möglichkeiten:
Ersten, können Sie eine Regel hinzufügen, um Ihr Makefile ausgeführt die Abhängigkeit Schritt:
Wenn nicht, dann von der
Last Resort
Abschnitt derinfo
- Seite für GNU-Make:Wird diese Arbeit zu erstellen leere
.d
Dateien für Sie?Wenn Sie makepp mit der option
--rm-stale
es bemerken-Dateien, die nicht mehr erstellbar und entfernen Sie Sie. Wenn dies ist der normale Anwendungsfall für Sie, Sie können diese option in.makepprc
an der Wurzel Ihres Bau-Baum, und es wird immer verwendet werden.Aber dann natürlich makepp all diese Griffe Abhängigkeit Erkennung selbst, so dass Sie nicht brauchen, um Durcheinander Ihre makefile. Es ist sogar noch besser als dein Ansatz, weil es erzeugen kann, die benötigten Header in der Zeit für den compiler zu Holen, wo
gcc -MM
scheitern würden.Es gibt viel mehr zu makepp. Außerdem machen fast alle, dass GNU make kann, es gibt noch viel mehr nützliche Dinge, und Sie können sogar verlängern Sie Ihre makefiles mit einigen Perl-Programmierung.