在AC_INIT中使用变量

Mou*_*Dog 7 autotools

有没有办法将变量传递给AC_INIT?例如

VERSION = 0.1
AC_INIT([my_package],$VERSION)
Run Code Online (Sandbox Code Playgroud)

Dan*_*lKO 10

从手册:

'AC_INIT'的参数必须是静态的,即不应该有任何shell计算,引号或换行符,但它们可以由M4计算.这是因为包信息字符串在M4时间扩展到几个上下文,并且必须在shell时间提供相同的文本,无论是在单引号字符串,双引号字符串,引用here-documents还是unquoted here-documents中使用. 允许使用'm4_esyscmd'或'm4_esyscmd_s'来计算版本字符串,该字符串随着对版本控制系统的每次提交而变化(事实上,对于版本之间的所有构建版本的开发树,Autoconf都会这样做).

这就是autoconf(目前)使用的:

AC_INIT([GNU Autoconf],
    m4_esyscmd([build-aux/git-version-gen .tarball-version]),
    [bug-autoconf@gnu.org])
Run Code Online (Sandbox Code Playgroud)

如果您不需要从外部源读取版本,则以下是GLIB使用的内容:

m4_define([glib_major_version], [2])
m4_define([glib_minor_version], [41])
m4_define([glib_micro_version], [0])
...
m4_define([glib_version],
      [glib_major_version.glib_minor_version.glib_micro_version])

...
AC_INIT(glib, [glib_version], ...)
Run Code Online (Sandbox Code Playgroud)

当然,你将不得不使用M4构建,而不是外壳,如m4_if(),m4_eval()