不同平台之间aclocal版本不匹配的问题

Posted

技术标签:

【中文标题】不同平台之间aclocal版本不匹配的问题【英文标题】:Problem with aclocal version mismatch between different platforms 【发布时间】:2019-10-14 21:13:54 【问题描述】:

我正在研究几台超级计算机,它们有不同的 autotools 版本。

当我在./configure 之后执行make 时,他们中的一些人给我一个关于错误版本的aclocal 的错误。

如果我在一个平台上重新配置我的 configure.ac,那么在另一个平台上也会发生同样的事情。

例如,一个平台会给我这个:

CDPATH="$ZSH_VERSION+.:" && cd . && aclocal-1.15
/bin/sh: aclocal-1.15: command not found
make: *** [aclocal.m4] Error 127

如果我运行autoreconf,它就可以正常工作。但是,如果我在其他一些平台上使用新生成的 configure.ac,它们会给我同样的错误,但版本号不同:

CDPATH="$ZSH_VERSION+.:" && cd . && aclocal-1.13
/bin/sh: aclocal-1.15: command not found
make: *** [aclocal.m4] Error 127

我知道每次去不同的平台时我都可以运行autoreconf -fi,但我听说让最终用户这样做并不是一个好习惯,因为这需要他们安装自动工具。

他们有三个不同的版本,我不知道如何处理。当我运行./configure 重新生成配置时,有什么方法可以自动运行autoreconf?或者有没有更好的方法来解决这个问题?

【问题讨论】:

autoreconf重新生成configure.acconfigure.ac 是一个人写的,autoreconf 会生成configure 和一堆其他文件来自 configure.ac @ndim 抱歉,这是一个错字。我想说的是是否可以在./configure 的最后运行autoreconf 来重新生成文件。 【参考方案1】:

我看到了将源代码分发到不同超级计算机的两种主要方式:

    make dist 生成的压缩包

    版本控制的源代码树

如果您使用make dist 生成的 tarball(案例 1)将源代码分发到不同的超级计算机,您可以使用从 tarball 中提取的单个源代码树用于所有不同的超级计算机,只要您在源外进行树在每个超级计算机的不同目录中构建。

如果您使用版本控制的源代码树(案例 2)来开发源代码并将其分发到不同的超级计算机,您有两种选择:

    make dist生成的文件保存在版本控制中

    将所有生成的文件保留在版本控制之外

如果您将 make dist 生成的文件保留在版本控制中(案例 21),则每个 autoreconf 在与生成这些文件的机器不同的机器上运行都会生成一组更改的生成文件,从而更改为没有实际原始更改的文件。所以在这种情况下,你需要定义一个单一的系统,你所有的开发工作都在这个系统上涉及到构建系统。所有其他系统只能在源代码内进行开发。然后,您可以在所有不同的超级计算机上使用单一版本控制的源代码树。

如果您将所有生成的文件保留在版本控制之外(案例 22),您将需要为每台不同的机器创建不同的版本控制源树副本,以避免工具版本不匹配。

在像 git 这样的分布式版本控制系统时代,这(案例 22)显然是我的首选。

【讨论】:

以上是关于不同平台之间aclocal版本不匹配的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于在不同版本和平台之间进行还原或复制的常见问题

Java 和 .NET 之间的 RegEx“匹配”不同

Laravel 中两个不同数据库之间的匹配 ID

如何修复 pg_dump 版本不匹配错误?

Nuget版本不匹配错误发生在两个解决方案中[重复]

计算来自 2 个不同表的 2 行之间的不匹配 - MySQL