2010-04-23 17 views
13

J'ai un projet GCC et je voudrais ajouter automatiquement des définitions pour la date de construction et le numéro de révision (de git) à mes sources. Quelle est la meilleure façon de faire cela?Comment ajouter une date de révision et de compilation à la source?

Mon but est simple d'être en mesure de faire quelque chose comme ceci au démarrage:

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

Pour la construction, je me sers faire avec un simple Makefile.inc, pas autoconf ou quelque chose comme ça.

Répondre

7

Je fini par utiliser une commande simple comme ça dans mon Makefile:

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

La substitution de mot clé RCS n'est pas supportée nativement par Git, mais peut être ajoutée avec un pilote de filtre gitattributes: Voir "Git equivalent of subversion's $URL$ keyword expansion".

alt text

Par exemple (pas exactement se rapportent à votre question, mais illustre le principe général):

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

Vous basez votre script filtre sur le résultat de git describe --tags appelé de votre Makefile .

Comme mentionné dans this answer à « équivalent Git de $ URL de subversion $ l'expansion de mot-clé », pilote de filtre maculage/clear est pas une solution parfaite, et en ajoutant une sorte de méta-données directement dans les données (source) est generally a bad idea (vous avez un débat à ce sujet dans "What are the basic clearcase concepts every developer should know?").

Pourtant, vous avez un bon exemple de tels Git extension de mot-clé dans this answer dans "Comment activer la chaîne d'identification pour Git repos?".