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

How to insert Git-based version in autoconf-managed project?

如何为 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 and/or acinclude.m4".

感谢任何帮助。

怎么样:

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

应该适合你。

m4_esyscmd 中的 运行 git describe 对于 AC_INIT 版本还有一些不足之处:

  • 如果你构建一个 dist tarball,使用什么版本? 这里根本没有 git describe 有用的输出。

  • 如果您刚刚提交更改,使用什么版本? 您是否从 git describe 更新了 configure 版本, 或者只是继续使用现有版本构建?

对于我自己的包(例如ndim-utils),我已经通过

解决了这些问题(以及更多)
  • 有一个特殊的 build-helpers/package-version 脚本,它确定要从 version-stamp 文件(如果找到)或 git describe 中使用的版本。 configure.ac AC_INITm4_esyscmd 该脚本。

  • 有一个特殊的 build-helpers/package-version.mk 包含在顶层 Makefile.am 中,它为 dist tarballs 生成一个 version-stamp 文件,检查当前 git describe 输出不同于 configure 存储的内容,以及一些其他内容。

  • 有一个 GNUmakefile.in 可以在必要时从 git describe 更新存储在 configure 内部的版本。

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

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