如何在autoconf管理的项目中插入基于Git的版本?

问题描述 投票:4回答:2

如何为autoconf项目分配动态的基于git的版本号? Autoconf需要一个静态字符串参数

AC_INIT([Title],[version],[name])

AC_INIT文档说可以使用M4提供基于shell的版本。 M4超出了我的范围。我想根据此命令的结果对我的软件进行版本控制

version=`git describe --abbrev=7 --dirty --always --tags`

这会产生类似4.6.6-alpha07-9-ga3e01a8的东西。

我可能不理解高级答案。我需要一个解决方案,例如“将其剪切并粘贴到您的autoconf.ac和/或acinclude.m4”。

任何帮助赞赏。

git versioning autotools autoconf m4
2个回答
6
投票

怎么样:

AC_INIT([Title], [m4_esyscmd_s([git describe --abbrev=7 --dirty --always --tags])])

应该适合你。


4
投票

git describe中为m4_esyscmd版本运行AC_INIT仍然有一些不足之处:

  • 如果你构建一个dist tarball,使用什么版本?这里根本没有git describe有用的输出。
  • 如果您刚刚提交了更改,可以使用哪个版本?你是从configure更新git describe版本,还是继续用现有版本构建?

对于我自己的软件包(例如ndim-utils),我已经解决了这些问题(以及其他一些问题)

  • 有一个特殊的build-helpers/package-version脚本,用于确定version-stamp文件中使用的版本(如果找到)或git describeconfigure.ac AC_INITm4_esyscmd那个剧本。
  • 有一个特殊的build-helpers/package-version.mk包括从顶级Makefile.am生成一个version-stamp文件的dist tarballs,检查当前git describe输出是否与configure存储的不同,以及其他一些东西。
  • GNUmakefile.in更新存储在configure内部的版本必要时从git describe

我可能已经忘记了该解决方案中解决的一些问题。

我不确定那些脚本是否已准备好复制到您的项目中,但我想在此提及还有一些需要考虑的事项。

© www.soinside.com 2019 - 2024. All rights reserved.