Makefile Tricks mit VPATH und umfassen
Ich bin Herumspielen mit make-Dateien und die VPATH-variable. Im Grunde bin ich packte source-Dateien von ein paar verschiedenen Orten (angegeben durch den VPATH), und kompilieren Sie Sie in das aktuelle Verzeichnis, indem Sie einfach eine Liste .o-Dateien, die ich will.
So weit So gut, jetzt bin ich generating dependency-Informationen in eine Datei namens '.hängen' und darunter, die. Gnumake wird versuchen, mit den Regeln so weit zu erstellen, die die Datei enthalten, wenn Sie nicht existiert, also ist das ok. Im Grunde, meine makefile sieht so aus.
VPATH=A/source:B/source:C/source
objects=first.o second.o third.o
executable: $(objects)
.depend: $(objects:.o=.c)
$(CC) -MM $^ > $@
include .depend
Jetzt für die eigentliche Frage, kann ich die unterdrücken die generation der .hängen Sie die Datei in irgendeiner Weise? Derzeit arbeite ich in einer clearcase Umgebung -> sloooow, so würde ich es vorziehen, es zu haben ein bisschen mehr unter Kontrolle, wenn Sie zum aktualisieren der Informationen zu Abhängigkeiten.
Es ist mehr oder weniger eine Akademische übung, da konnte ich einfach wickeln Sie die Sache in ein script, das berühren der .hängen Sie die Datei vor dem ausführen machen (so dass es neuer als alle Quell-Datei), aber es wäre interessant zu wissen, ob ich irgendwie unterdrücken es mit "pure" stellen.
Ich die Abhängigkeit nicht entfernen, um die Quelldateien (d.h. mit einfach .depend:
), da bin ich je nach $^
Variablen zu tun, die VPATH Auflösung für mich.
Wenn, es würde keine Möglichkeit zu nur aktualisieren, Abhängigkeiten als Ergebnis der aktualisierten #include
Richtlinien, das wäre noch besser natürlich.. Aber ich werde nicht meinen Atem für einen.. 🙂
- Warum nicht einwickeln
.depend: ...
Ziel inif
Richtlinie arbeiten? - interessant, ich hätte nie gedacht, dass.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht wollen, zu erneuern .hängen Sie jedes mal, Sie darf nicht eine Regel für Sie. Beachten Sie, dass, wenn Sie wirklich brauchen, um ein remake der Abhängigkeiten-Datei, müssen Sie auch das remake eine Objekt-Datei (das ist nicht meine Erkenntnis, es kommt aus Erweiterte Automatische Generierung Von Abhängigkeiten, und es hat einige Zeit gedauert, es zu begreifen). So bauen .abhängen in der Verknüpfung der Regel mit einem FALSCHEN Ziel:
Können Sie Dinge effizienter durch separate hängen-Dateien, eine für jedes Objekt, so dass, wenn man änderungen, die Sie nicht haben, um eine Neuberechnung der Abhängigkeiten aller Objekte:
(EDIT: so korrigiert ein dummer Fehler.)
-include *.d
. Dies bewirkt, dass die Neukompilierung ausgelöst werden, wenn erforderlich, produzieren Abhängigkeiten als Nebenprodukt. Keine Arbeit ist getan, wenn Sie nicht benötigt wird. Ausgezeichnet!