将mercurial changeset注入C可执行文件中的版本信息

Set*_*jmp 10 c autoconf revision version changeset

我希望我正在处理的项目的可执行文件记录了最新的mercurial变更集,以便当用户抱怨错误行为时,我可以跟踪他们正在使用的版本.我的一些可执行文件是Python,其他的是C编译.有没有办法自动化这个,或者你能指出我展示解决方案的项目吗?

我在我的项目中使用autoconf ...以防止解决方案更容易.

谢谢!

那么setjmp

Wil*_*ell 6

执行此操作的常用方法是使用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([Package name], m4_esyscmd([git describe --dirty | tr -d '\012']), 
  [bug-report-address])

而不是git-describe,使用您想要生成版本号的任何命令.一个重要的细节是它不应该有一个尾随换行符(因此跟随git-describe的tr).

此技术的一个主要缺点是版本号仅在运行autoconf时生成.


Jac*_*lly 5

将此添加到configure.ac:

AM_CONDITIONAL([IS_HG_REPO], [test -d "$srcdir/.hg"])
Run Code Online (Sandbox Code Playgroud)

将以下行添加到Makefile.am:

if IS_HG_REPO
AM_CPPFLAGS = -DHGVERSION="\"$(PACKAGE) `hg parents --template 'hgid: {node|short}'`\""
else
AM_CPPFLAGS = -DHGVERSION=PACKAGE_STRING
endif
Run Code Online (Sandbox Code Playgroud)

这将定义HGVERSION为表单的字符串,APPNAME hgid: 24d0921ee4bd或者APPNAME VERSION,如果从发布tarball构建.