我有一个GCC项目,并希望自动将构建日期和修订号(从git)的定义添加到我的源代码中。最好的方法是什么?
我的目标很简单,就是可以在启动时做这样的事情:
printf("Test app build on %s, revision %d", BUILD_DATE, REVISION)
对于构建我使用make使用简单的Makefile.inc,而不是autoconf或类似的东西。
答案 0 :(得分:7)
我最终在Makefile
:
echo "#define GIT_REF \"`git show-ref refs/heads/master | cut -d " " -f 1 | cut -c 31-40`\"" > git_ref.h
答案 1 :(得分:4)
Git本身不支持RCS关键字替换,但可以添加gitattributes
过滤器驱动程序:请参阅“Git equivalent of subversion's $URL$ keyword expansion”。
例如(不是完全与您的问题相关,但说明了一般原则):
git config filter.rcs-keyword.clean 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"'
git config filter.rcs-keyword.smudge 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date: `date`\\\$/"'
您将根据Makefile中调用的git describe --tags
结果生成过滤器脚本。
如this answer中提到的“Git相当于subversion的$ URL $关键字扩展”,涂抹/清除过滤器驱动程序不是一个完美的解决方案,并且直接在数据中添加任何类型的元数据(源)是generally a bad idea(您在“What are the basic clearcase concepts every developer should know?”中对此进行了辩论。
然而,您在“我如何为Git repos启用识别字符串?”中的this answer中有一个很好的例子来说明这种Git 关键字扩展。