GCCプロジェクトがあり、ビルド日付とリビジョン番号(gitから)の定義をソースに自動的に追加したいと思います。これを行うための最良の方法は何ですか?
私の目標は、起動時に次のようなことができるようにすることです。
printf("Test app build on %s, revision %d", BUILD_DATE, REVISION)
ビルドには、autoconfなどではなく、単純なMakefile.incでmakeを使用しています。
私は私のMakefile
:でこのような単純なコマンドを使用することになりました
echo "#define GIT_REF \"`git show-ref refs/heads/master | cut -d " " -f 1 | cut -c 31-40`\"" > git_ref.h
RCS keyword substitution is not natively supported by Git, but can be added with a gitattributes
filter driver: See "Git equivalent of subversion's $URL$ keyword expansion".
For example (not exactly relate to your question, but illustrates the general principle):
git config filter.rcs-keyword.clean 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"'
git config filter.rcs-keyword.smudge 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date: `date`\\\$/"'
You will base your filter script on the result of git describe --tags
called from your Makefile.
As mentioned in this answer to "Git equivalent of subversion's $URL$ keyword expansion", smudge/clear filter driver is not a perfect solution, and adding any kind of meta-data directly in the data (source) is generally a bad idea (you have a debate about it in "What are the basic clearcase concepts every developer should know?").
Yet you have a good example of such Git keyword expansion in this answer in "How do I enable ident string for Git repos?".