在 ac-aux 中找不到 install-sh、install.sh 或 shtool

Mic*_*cah 97 install-from-source configure

这是我第一次尝试在 linux 机器上编译和安装任何东西。我通过 git获得了最新版本的https://github.com/processone/exmpp并阅读了说明:

2. 构建和安装

Exmpp 使用 Autotools。因此这个过程很常见:

$ ./configure
$ make
$ sudo make install
Run Code Online (Sandbox Code Playgroud)

键入后./configure我收到错误

在 ac-aux 中找不到 install-sh、install.sh 或 shtool

谷歌几乎没有帮助。完全不知道我应该做什么。任何帮助将非常感激

sk2*_*910 131

我使用以下工具创建了配置脚本:

libtoolize --force
aclocal
autoheader
automake --force-missing --add-missing
autoconf
./configure
Run Code Online (Sandbox Code Playgroud)

我没有所有的依赖项,所以我现在无法测试它,但这通常是您从 ac 文件创建配置脚本的方式。

  • 程序员注意:请停止使用 automake 工具链。*请*。 (15认同)
  • @Sergei 它很乱,很慢,而且经常中断。它杂乱无章的定义并且是令人难以置信的 _magic_。它处理依赖关系(或缺乏依赖关系)的方式给出了神秘的错误消息,它产生的文件最好是不可读的,最坏的情况是噩梦般的破碎。 (5认同)
  • @Sergei CMake 在我看来是目前最可行的。我相信在(不久的)将来会有更好的东西。 (4认同)
  • README 中的说明可能是从其他地方盲目复制的。我不得不承认,我并不了解 autoconf 工具链的每一个细节;它基本上是生成并用于创建配置脚本的宏的集合(反过来,它为编译和安装过程设置了阶段)。我从来不需要微调这些东西,所以我不是专家,但是[这里]有一些相当广泛的解释(http://sourceware.org/autobook/autobook/autobook_toc.html#SEC_Contents) (2认同)
  • @Qix,你能解释一下为什么吗? (2认同)

ent*_*opy 49

好吧,我尝试了 sebastian_k 的答案,但它对我不起作用(./configure中途坠毁,出现了一个非常奇怪的错误)。

做了什么,但是对我有用的是复制我发现的构建日志中使用的说明

简短版本(所以你不必自己涉水)是:

$ autoreconf -vif
$ ./configure --prefix=/usr/lib/erlang/lib
$ make
$ sudo make install
Run Code Online (Sandbox Code Playgroud)

  • +1。`autoreconf -i` 是正确答案(`v` 和 `f` 通常是可选的) (17认同)
  • +1。这是唯一对我有用的答案。 (2认同)

Psy*_*aut 12

这个问题,以及这里的大多数其他答案,源于对使用GNU 构建系统(又名 Autotools)的项目是如何分布的误解。事实上,在OP 提到的Erlang XMPP 库的情况下,误解似乎是在开发人员方面。

以正确的方式获取软件

如果您想要做的只是编译和安装随 GNU Autotools 发布的项目,那么您不应该从源代码控制系统中检出它。您应该改为下载开发人员提供的打包源版本。这些通常采用在项目网站上分发的 tarball 的形式。对于完全托管在 GitHub、Savannah 或一些类似托管服务上的项目,这些 tarball 通常会在标记为“下载”或“发布”的链接后面找到。你解开包裹并说出标准./configure && make && sudo make install咒语的一些变体。就这样; 您不需要调用任何 GNU Autotools,甚至不需要在您的系统上安装 GNU Autotools。

作为用户,您不需要 GNU Autotools 来编译 Autotools 打包项目的原因是,开发人员已经使用各种 Autotools 程序生成了一个“发行版 tarball”,可用于在任何平台上构建软件。类Unix系统。发行版 tarball 包含一个高度可移植的configure脚本,用于扫描构建环境、检查依赖关系并Makefile为您的系统构建自定义。

那么什么时候需要 Autotools?

您需要自己安装和调用 GNU Autotools 的唯一原因是,如果您想对使用 Autotools 构建的项目进行开发工作。即便如此,除非您更改项目的依赖项,否则您可能不需要 Autotools。在这种情况下,你会确实需要检查的原始来源,做出了自动工具特定的输入文件(适当的修改configure.acMakefile.am等等),并在其上运行的自动工具生成一个新configure文件。如果你想独立发布修改后的包,那么你可以使用 Autotools 生成的 Makefile 生成一个新的发行版 tarball,然后将该 tarball 发布到网上的某个地方。

问题是一些开发人员公开了他们的源存储库,但忽略了发布他们的发行版 tarball(或者很难找到它们的发布位置)。例如,而不是发布其分布压缩包为GitHub上发布,在二郎XMPP库的GitHub上发布的原始源代码库的压缩包。这使得在没有 GNU Autotools 的情况下无法编译项目,首先就违背了使用 Autotools 的全部目的。

TL;DR 总结

GNU Autotools 是开发人员用来为用户制作可移植源代码包的东西。 用户应该从这些源代码包中下载和编译,而不是从源代码管理系统中下载原始代码。如果开发人员不提供这些源包,那么他们没有正确使用 Autotools,应该用湿鳟鱼轻轻拍打,直到他们看到他们的方式错误。

  • 这是相关的,因为 OP 下载的软件不包含正确的配置脚本(源控制中的最新版本,加上发布的 tarball,根本不包含配置脚本)。这里几乎所有的答案都告诉 OP 运行 Autotools。虽然这可能会解决问题,但了解根本原因很重要:开发人员是负责运行 Autotools 的人,但他们没有正确地(或根本没有)完成此操作。 (4认同)

小智 8

请执行以下操作来解决此问题,

sudo apt-get install autogen libtool shtool
Run Code Online (Sandbox Code Playgroud)

然后进行安装

sh autogen.sh --prefix=prefered_install_path
make 
make install 
Run Code Online (Sandbox Code Playgroud)