2010-04-23 9 views
13

Ich habe ein GCC-Projekt und möchte automatisch Definitionen für Build-Datum und Revisionsnummer (von Git) zu meinen Quellen hinzufügen. Was ist der beste Weg, dies zu tun?Wie füge ich Revision und Builddatum zur Quelle hinzu?

Mein Ziel ist einfach der Lage sein, so etwas wie dies beim Start zu tun:

printf("Test app build on %s, revision %d", BUILD_DATE, REVISION) 

Für Gebäude Ich verwende mit einem einfachen Makefile.inc machen, nicht autoconf oder etwas Ähnliches.

Antwort

7

landete ich in meinem Makefile wie dies mit einem einfachen Befehl auf:

echo "#define GIT_REF \"`git show-ref refs/heads/master | cut -d " " -f 1 | cut -c 31-40`\"" > git_ref.h 
4

Die RCS-Schlüsselwortersetzung wird von Git nicht nativ unterstützt, kann aber mit einem gitattributes Filtertreiber hinzugefügt werden: Siehe "Git equivalent of subversion's $URL$ keyword expansion".

alt text

Zum Beispiel (nicht genau auf Ihre Frage beziehen, sondern zeigt das allgemeine Prinzip):

git config filter.rcs-keyword.clean 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"' 
git config filter.rcs-keyword.smudge 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date: `date`\\\$/"' 

Sie Ihre Filter-Skript auf dem Ergebnis der git describe --tags von Ihrem Makefile genannt Basis .

Wie in this answer genannten „Git-äquivalent von $ URL $ Stichwort Expansion der Subversion“, wisch/clear-Filtertreiber ist keine perfekte Lösung, und das Hinzufügen von jeder Art von Meta-Daten direkt in den Daten (Quelle) ist generally a bad idea (Sie haben eine Debatte darüber in "What are the basic clearcase concepts every developer should know?").

Noch haben Sie ein gutes Beispiel für solche Git Stichwort Erweiterung in this answer in "Wie kann ich Ident String für Git Repos aktivieren?".