我希望我正在处理的项目的可执行文件能够记录最新的 mercurial 变更集,以便当用户抱怨错误行为时,我可以跟踪他们正在使用的版本。我的一些可执行文件是 Python,而另一些是编译的 C。有没有办法自动化这个,或者你能指出我可以查看的展示解决方案的项目吗?
我在我的项目中使用 autoconf ......以防使解决方案更容易。
谢谢!
设置
执行此操作的常用方法是使用 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,使用您想要生成版本号的任何命令。一个重要的细节是它不应该有一个尾随换行符(因此 tr 在 git-describe 之后)。
这种技术的一个主要缺点是版本号仅在您运行 autoconf 时生成。
将此添加到configure.ac
:
AM_CONDITIONAL([IS_HG_REPO], [test -d "$srcdir/.hg"])
将以下行添加到Makefile.am
:
if IS_HG_REPO
AM_CPPFLAGS = -DHGVERSION="\"$(PACKAGE) `hg parents --template 'hgid: {node|short}'`\""
else
AM_CPPFLAGS = -DHGVERSION=PACKAGE_STRING
endif
这将定义HGVERSION
为形式的字符串,APPNAME hgid: 24d0921ee4bd
或者APPNAME VERSION
,如果从发布 tarball 构建。
请参阅有关使用 make进行版本控制的 wiki 页面