在配置脚本中硬编码的automake版本(am__api_version)

时间:2015-04-20 11:44:25

标签: linux makefile autotools automake

我目前正在使用autotools开发Linux项目。代码在SCM(Perforce)中提交,我们有配置脚本Makefile.am,Makefile.in - 通常的autotools样板。最近,有人改变了Makefile.am,但忘了重新生成Makefile.in;当我尝试构建时,我收到了这个错误:

WARNING: `automake-1.11' is missing on your system.  You should only need it if
         you modified `Makefile.am', `acinclude.m4' or `configure.ac'.
         You might want to install the `Automake' and `Perl' packages.
         Grab them from any GNU archive site.
 cd . && /bin/bash ./config.status Makefile depfiles

我看到automake版本在configure脚本中是硬编码的(似乎来自aclocal.m4):

am__api_version='1.11'

所以我想我需要使用automake-1.11(不是1.10,而不是更新的东西)来重新生成Makefile.in文件。

为什么?我们为什么要绑定特定的automake版本?我们主要建立在Ubuntu 14.04上,其中1.14是安装的默认版本。有没有办法告诉构建系统简单地使用任何版本的automake?或者从aclocal.m4中删除am__api_version定义是否安全?

2 个答案:

答案 0 :(得分:1)

问题是您正在尝试使用其他版本的autotools重新创建Makefile.in。这会导致版本不匹配,因为aclocal.m4是使用不同的版本构建的,它用于生成剩余的文件。

不是仅重新创建Makefile.in,而是尝试重新创建aclocal.m4以及所有剩余的autotools生成的文件:

autoreconf --force --install   

答案 1 :(得分:0)

重要的问题是为什么有人会修复am__api_versions。 最可能的答案是:因为automake倾向于改变宏的参数,甚至删除以前版本的完全宏。在automake的每个发布公告中,都有一个名为

的部分
  

警告:未来的后向兼容性!

和另一个名为

的人
  

已删除过时功能

您可以参考版本1.121.131.14

因此configure.acMakefile.am可能包含一些在以后的版本中已经过时的宏。遇到这个问题时,你有两种可能性。要么找出哪个功能替换了过时的功能,要么坚持使用automake的一个版本。大多数开发人员不认为autotools文件是项目源代码的一部分。他们只希望保持工作版本的运行并坚持使用当前的am版本。

请注意,所有发行版都支持旧版automake。在ubuntu中,您可以找到:

$ apt-cache search automake | grep automake
automake - Tool for generating GNU Standards-compliant Makefiles
automake1.4 - A tool for generating GNU Standards-compliant Makefiles
automake1.9 - A tool for generating GNU Standards-compliant Makefiles
automake1.10 - Tool for generating GNU Standards-compliant Makefiles
automake1.11 - Tool for generating GNU Standards-compliant Makefiles

这意味着您可以安装所请求的automake版本。

因此,您可以删除行am__api_version='1.11'并找出哪个宏已过时。然后,您将必须决定您将遵循以上两种解决方案中的哪一种。