10

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

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

谢谢!

设置

4

3 回答 3

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([包名], m4_esyscmd([git describe --dirty | tr -d '\012']),
  [错误报告地址])

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

这种技术的一个主要缺点是版本号仅在您运行 autoconf 时生成。

于 2010-08-31T08:04:39.210 回答
5

将此添加到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 构建。

于 2010-09-01T12:46:27.873 回答
1

请参阅有关使用 make进行版本控制的 wiki 页面

于 2010-08-29T01:08:52.297 回答