¿Cómo agrego la revisión y la date de compilation a la fuente?

Tengo un proyecto de GCC y me gustaría agregar automáticamente las definiciones para la date de compilation y el número de revisión (de git) a mis fonts. ¿Cuál es la mejor manera de hacer esto?

Mi objective es simple poder hacer algo como esto al inicio:

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

Para build estoy usando make con un simple Makefile.inc, no autoconf o algo como esto.

Terminé usando un command simple como este en mi Makefile :

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

La sustitución de palabras key RCS no es compatible de forma nativa con Git, pero se puede agregar con un gitattributes filter gitattributes : consulte " Equivalente de Git a la expansión de palabras key $ URL $ de subversión ".

text alternativo http://progit.org/figures/ch7/18333fig0702-tn.png

Por ejemplo (no se relaciona exactamente con su pregunta, pero ilustra el principio general):

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

git describe --tags su script de filter en el resultado de git describe --tags llamado desde su Makefile.

Como se menciona en esta respuesta a "Equivalente de Git a la expansión de palabras key $ URL $ de subversión", el controller de filter difuminar / borrar no es una solución perfecta y agregar cualquier tipo de metadato directamente en los datos (fuente) es generalmente una mala idea ( usted tiene un debate al respecto en " ¿Cuáles son los conceptos claros básicos que todo desarrollador debe saber? ").

Sin embargo, tiene un buen ejemplo de dicha expansión de palabras key de Git en esta respuesta en "¿Cómo habilito la cadena de identidades para repositorys Git?".