make: wie testen ob sich eine *.hpp Datei verändert hat?
-
Hallo,
in einer makefile gibt es ja oft Regeln wie:
%.o: %.cpp
Also jede Objektdatei hängt von einer Sourcedatei ab.
Wenn sich die Sourcedatei ändert wird auch die Objektdatei neu erstellt.
Wenn man nun aber eine Headerdatei ändert und diese von einer Sourcedatei
eingebunden wird, wird die Objektdatei nicht neu erstellt. Gibt es ein gutes
Verfahren wie man dieses Verhalten einbauen kann?Gruß
-
Manuell:
objektdatei.o: abhaengigkeit.h auch_abhaengigkeit.hUnd dann einfach kein Rezept dazu.
Automatisch:
Kann man sich beispielsweise mit makedepend generieren lassen. Schon bei mittelgroßen Projekten werden das nämlich schnell hunderte Zeilen.
Alternativen zum etwas angestaubten makedepend findest du schnell, wenn du dich über makedepend kundig machst. Ich mag makedepend aber, weil es so schön einfach ist.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Vielen Dank,
das war genau das was ich suche. Mir hatten nur die Suchwörter gefehlt

Hier steht es nochmal schön erklärt.
http://en.wikipedia.org/wiki/Makedepend
-
Statt makedepend kannst Du auch Deinen Compiler verwenden. In der Regel können die Compiler über eine Option auch Abhängigkeiten erzeugen. Mit gcc geht das beispielsweise mit der Option
-M.
-
Damit habe ich es jetzt im Endeffekt auch gemacht, aber eine Frage hätte ich noch. Mit -M werden ja alle Deps angezeigt und mit -MM werden die Systemdeps weggelassen. Kann man irgendwie auch weitere Ordner aussschließen? Wenn man z.B. boost in einem eigenen Ordner und nich in /usr hat, dann werden die boost-header immer als dep gelistet und das ist nicht erwünscht.
-
Beispiel Makefile die auch Header-Abhängigkeiten berücksichtigt.
-
maaker schrieb:
Damit habe ich es jetzt im Endeffekt auch gemacht, aber eine Frage hätte ich noch. Mit -M werden ja alle Deps angezeigt und mit -MM werden die Systemdeps weggelassen. Kann man irgendwie auch weitere Ordner aussschließen? Wenn man z.B. boost in einem eigenen Ordner und nich in /usr hat, dann werden die boost-header immer als dep gelistet und das ist nicht erwünscht.
Klar geht das. Beispielsweise so:
g++ -MM myfile.cpp|grep -v '^ /nicht/dieses/verzeichnis/' >out.deps
-
Cool, Danke. Ich arbeite noch nicht so lange mit Linux und bin immer wieder erstaunt wie einfach man vieles mit standard-sachen machen kann
