我有一个基于autotools的包调用Foo。由于历史原因(有没有其他原因?),这包含一个子包subBar。
Foo -|
|- configure.ac
|- Makefile.am
|- subBar -|
|- configure.ac
|- Makefile.am
subBar的configure.ac非常复杂,如果可以避免的话我希望不要弄乱它。另一方面,subBar与Foo紧密集成,因此为它保留单独的版本号是没有意义的。
有没有办法将Foo的版本(从AC_INIT)传播到subBar?显而易见:
subBar/configure.ac:
AC_INIT([subBar], [$(VERSION)], ...)
由于循环引用而无效。
有什么想法吗?
答案 0 :(得分:2)
manual提供了一种可能的解决方案:
AC_INIT的参数必须是静态的,即不应该有任何参数 shell计算,引号或换行符,但它们可以通过计算 M4 ...允许使用m4_esyscmd或m4_esyscmd_s 计算每次提交到版本时更改的版本字符串 控制系统(实际上,Autoconf就是这样做的,适用于所有版本的 发布之间的开发树。)
由于autoconf
本身在自己的configure.ac
中使用了这个:
AC_INIT([GNU Autoconf],
m4_esyscmd([build-aux/git-version-gen .tarball-version]),
[bug-autoconf@gnu.org])
您需要将其替换为您自己的系统命令或shell脚本以获取版本字符串。例如,名为.foo-version
并带有“MAJOR.MINOR
”的顶级文件,并从git-version-gen
借用,例如:m4_esyscmd([tr -d '\n' < ../.foo-version])
我想您可以在顶级包中使用相同的命令,当然用../
替换./
。由于m4正在调用系统命令,因此您可以随意获取版本字符串。
答案 1 :(得分:0)
https://github.com/ClusterLabs/libqb/blob/master/build-aux/git-version-gen
这是一个你可以采用的shell脚本文件...对于那些不熟悉的人...然后将名称定制为两个单独的变量文件集,如docker run --entrypoint "/usr/bin/python2.7 startup.py"
和.subBar-tarball-version
以及.tarball-version
和.subBar-version