automake - 不同平台之间aclocal版本不匹配的问题
问题描述
我正在研究几台具有不同自动工具版本的超级计算机。
当我做make
after./configure
时,他们中的一些人给了我一个关于错误版本 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
每次去不同的平台时我都可以运行,但我听说让最终用户这样做并不是一个好习惯,因为这需要他们安装自动工具。
他们有三个不同的版本,我不知道如何处理。autoreconf
当我运行./configure
重新生成配置时,有什么方法可以自动运行?或者有没有更好的方法来解决这个问题?
解决方案
我看到了将源代码分发到不同超级计算机的两种主要方式:
生成的压缩包
make dist
版本控制的源代码树
如果您使用make dist
生成的 tarball(案例 1)将源代码分发到不同的超级计算机,则可以使用从 tarball 中提取的单个源代码树用于所有不同的超级计算机,只要您在不同的 per-超级计算机目录。
如果您使用版本控制的源代码树(案例 2)来开发源代码并将其分发到不同的超级计算机,您有两种选择:
将
make dist
生成的文件保存在版本控制中将所有生成的文件保留在版本控制之外
如果您将make dist
生成的文件保存在版本控制中(案例 21),则每次autoreconf
在与生成这些文件的机器不同的机器上运行都会生成一组更改的生成文件,因此对文件进行更改而没有实际的原始更改。所以在这种情况下,你需要定义一个单一的系统,你所有的开发工作都在这个系统上涉及到构建系统。所有其他系统只能在源代码内进行开发。然后,您可以在所有不同的超级计算机上使用单一版本控制的源代码树。
如果您将所有生成的文件保留在版本控制之外(案例 22),您将需要为每台不同的机器创建不同的版本控制源代码树副本,以避免工具版本不匹配。
在像 git 这样的分布式版本控制系统时代,这(案例 22)显然是我的首选。
推荐阅读
- xamarin.forms - 仅在一个 Entry 控件上使用自定义渲染器
- java - 如何在 ExecutorService 的 executor 之间进行同步
- node.js - 在 Windows Node.js fs.readdirSync 与用户文件夹等
- android - 通过 AdMob ID 检索用户信息
- npm - 'webpack-dev-server' 未被识别为内部或外部命令,
- javascript - D3 力模拟 - 使节点更靠近同一角度的点
- android - 布局 - 约束不起作用
- date - Freemarker - 将 01-JAN -1960 转换为 01/01/1960
- swift - 核心数据编码模式
- salesforce - 无法通过段在 Salesforce 中设置潜在客户对象的记录类型