Ich versuche, meine Subversion-Revisionsnummer in ein C++-Projekt einzubetten und habe Probleme, GNU make dafür einzurichten. Mein Makefile sieht derzeit etwa so aus:
check-svnversion:
../shared/update-svnversion-h.pl
../shared/svnversion.h: check-svnversion
shared/svnversion.o: ../shared/svnversion.h
.PHONY: check-svnversion
svnversion.o
hängt ab von svnversion.cpp
(über eine Musterregel) und svnversion.h
(explizit aufgeführt, weil die Abhängigkeitsüberprüfung es aus irgendeinem Grund nicht erkennt). svnversion.h
wird erstellt und gepflegt von der update-svnversion-h.pl
Skript (das im Grunde nur Folgendes ausführt svnversion
und mischt die Ausgabe in eine C++-Datei).
Zurzeit muss ich Folgendes ausführen make
zweimal, um die Datei auf den neuesten Stand zu bringen. Das erste Mal, make
läuft update-svnversion-h.pl
(da es als Voraussetzung aufgeführt ist), prüft aber nicht den Zeitstempel von svnversion.h
anschließend zu sehen, dass sie von update-svnversion-h.pl
so dass sie nicht neu erstellt wird svnversion.o
. Beim zweiten Mal prüft es den Zeitstempel, führt update-svnversion-h.pl
(was dieses Mal nichts bringt, da svnversion.h
auf dem neuesten Stand ist), kompiliert dann neu svnversion.cpp
zu machen svnversion.o
.
Gibt es eine Möglichkeit, GNU make anzuweisen, eine einzelne Voraussetzung zweimal zu überprüfen oder die Überprüfung des Zeitstempels einer Voraussetzung zu verzögern, bis die Befehle dieser Voraussetzung beendet sind?
Oder gibt es eine bessere Möglichkeit, eine Revisionsnummer in meinen Quellcode einzubetten? (Aus Geschwindigkeitsgründen versuche ich, Lösungen zu vermeiden, die eine Neukompilierung bei jedem Build erfordern würden).