【问题标题】:Using a variable in AC_INIT在 AC_INIT 中使用变量
【发布时间】:2014-05-17 06:30:42
【问题描述】:

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

VERSION = 0.1
AC_INIT([my_package],$VERSION)

【问题讨论】:

标签: autotools


【解决方案1】:

来自手册:

“AC_INIT”的参数必须是静态的,即,不应该有 可以是任何 shell 计算、引号或换行符,但它们可以是 由 M4 计算。这是因为包信息字符串 在 M4 时间被扩展为几个上下文,并且必须给出 在 shell 时相同的文本是否用于单引号字符串, 双引号字符串、引用的 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])

如果您不需要从外部来源阅读版本,以下是 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], ...)

当然,您必须使用 M4 构造而不是 shell,例如 m4_if()m4_eval() 等。

【讨论】:

  • 对于任何收到“错误:应使用包和版本参数调用 AC_INIT”的人,我可以通过将 m4_esyscmd 括在方括号中来使其工作。此外,如果您碰巧使用最后执行“echo”的脚本获取版本号,请务必使用“-ne”。我的配置脚本对版本字符串中的换行符不满意!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2021-11-04
  • 2020-09-22
相关资源
最近更新 更多