将mercurial changeset注入C可执行文件中的版本信息
我希望我正在处理的项目的可执行文件记录了最新的mercurial变更集,以便当用户抱怨错误行为时,我可以跟踪他们正在使用的版本。 我的一些可执行文件是Python,其他的是C编译。有没有办法自动化这个,或者你能指出我展示可以看到的解决方案的项目吗?
我在我的项目中使用autoconf …以防止解决方案更容易。
谢谢!
那么setjmp
将其添加到configure.ac
:
AM_CONDITIONAL([IS_HG_REPO], [test -d "$srcdir/.hg"])
Makefile.am
添加到Makefile.am
:
if IS_HG_REPO AM_CPPFLAGS = -DHGVERSION="\"$(PACKAGE) `hg parents --template 'hgid: {node|short}'`\"" else AM_CPPFLAGS = -DHGVERSION=PACKAGE_STRING endif
如果从发布tarball构建,这将HGVERSION
定义为APPNAME hgid: 24d0921ee4bd
或APPNAME VERSION
forms的字符串。
执行此操作的常用方法是使用m4_esyscmd。 例如,autoconf在build-aux中分发一个脚本,它从git repo生成一个版本号,并调用AC_INIT:
AC_INIT([GNU Autoconf],m4_esyscmd([build-aux / git-version-gen .tarball-version]), [bug-autoconf@gnu.org])
您可以经常离开而不分发脚本并执行以下操作:
AC_INIT([包名],m4_esyscmd([git describe --dirty | tr -d'\ 012']), [错误报告地址])
而不是git-describe,使用您想要生成版本号的任何命令。 一个重要的细节是它不应该有一个尾随换行符(因此跟随git-describe的tr)。
此技术的一个主要缺点是版本号仅在运行autoconf时生成。
有关make的版本控制,请参阅wiki页面