是否有记录在案的方法可以从非标准位置使用自动工具?

Posted

技术标签:

【中文标题】是否有记录在案的方法可以从非标准位置使用自动工具?【英文标题】:Is there a documented way to use autotools from a nonstandard location? 【发布时间】:2015-04-13 21:30:06 【问题描述】:

我正在尝试在安装了一组过期自动工具的机器上构建thrift 库。我在没有 root 的情况下工作,并试图避免修改 root 拥有的任何文件。

我下载并构建了每个自动工具的最新版本,但是当我尝试使用它们时,我遇到了一些关于其他自动工具位置的硬编码假设。

例如,除了PATH 的更改之外,我还必须设置变量AUTOM4TE_CFGautom4te_perllibdir,以及在thrift 分发中手动修改一堆与autotools 相关的配置文件。

从生活在非标准位置的自动工具引导构建所需的工作量和性质似乎非常棘手,特别是考虑到自动工具旨在提高可移植性。

是否有记录在案的方法可以从非标准位置运行整套自动工具?

【问题讨论】:

如果您只是想从 tarball 构建 Thrift,那么您不需要任何自动工具,更不用说最近的了。 ./configuremakemake install 应该可以解决问题。仅当您修改 configure.acMakefile.am 等文件时才需要自动工具。 @ptomato 我正在尝试从版本控制中构建它。然而,问题比节俭更广泛。 嗯,在 $HOME 的子目录中运行 autotool 链时,我从来没有遇到过任何问题。你是如何安装一切的?我通常从 git 将 autoconf、automake 和 libtool 安装到 $HOME/bin 中,然后运行 ​​$HOME/bin/autoreconf,让它使用系统中的 m4 和其他工具。你是如何安装自动工具的? (即,您只是在配置期间设置 --prefix,还是在生成时设置 DESTDIR 或其他) 问题是使用系统中的 m4 和其他工具。我的整个工具链都过时了,包括 m4。 所以安装最新的 m4 并将其位置放在系统版本之前的 PATH 中。我相信 autoconf 会将适当的变量(M4PATH?)设置为它在运行 autoconf 的配置时找到的版本。 【参考方案1】:

首先让我说我对节俭一无所知。也许它会做一些奇怪的事情——自动工具总是有可能的,因为它们是非常开放的。

其次,据我所知,这些都没有真正记录在案。然而,这是自动工具本身工作方式的逻辑结果。

有点例行公事地从个人构建中运行自动工具。我的情况没有你那么极端,可以依赖m4这个系统,但是基本思路是一样的。

我所做的是下载(或查看)我想要的工具版本。然后,我按顺序构建它们:autoconf,然后是automake,然后是libtool,如果我真的认为我需要它的话。对于每一个,我在配置时都使用相同的--prefix 选项。我将它指向一个新目录。这样,在make install 之后,所有工具最终都在同一个安装树中。

这看起来像:

cd $src/autoconf-$version
./configure --prefix=/home/tromey/autotools
make && make install
cd ../automake-$version
./configure --prefix=/home/tromey/autotools
make && make install
... libtool if you need it

在此之后,我将$prefix/bin 添加到我的PATH。然后一切准备就绪。

这里有两条皱纹。

首先,如果我遇到您的情况,我将首先使用相同的方法构建m4——但我会在构建autoconf 之前将前缀添加到我的PATH。这样autoconf 构建将选择正确的m4 可执行文件。

其次,有时程序依赖于提供宏并被aclocal 使用的.m4 文件。有时我需要对系统提供的.m4 文件或其他类似的黑客进行奇怪的符号链接来进行构建。不过这种情况比较少见。

【讨论】:

以上是关于是否有记录在案的方法可以从非标准位置使用自动工具?的主要内容,如果未能解决你的问题,请参考以下文章

从非 Java 应用程序中获取文本

是否可以在 Spring 中从非事务方法调用事务方法?

从非托管进程中卸载 .NET DLL

从非标准的POST数据流中提取文件

是否有记录 Svelte 组件的标准方法?

Excel - 聚合:从非空白单元格中提取数据