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

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

2. Build and install

Exmpp uses the Autotools. Therefore the process is quite common:

$ ./configure
$ make
$ sudo make install
在输入./configure后,我遇到了错误:

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

对我来说,谷歌没有提供太多帮助。我真的不确定我应该怎么做。非常感谢任何帮助。
10个回答

我使用以下工具创建了配置脚本:
libtoolize --force
aclocal
autoheader
automake --force-missing --add-missing
autoconf
./configure

我现在没有所有的依赖项,所以无法进行测试,但通常情况下,您可以从一个ac文件创建一个配置脚本。

我是个彻头彻尾的新手。你能解释一下你在做什么以及为什么自述文件中的说明不起作用吗? - Micah
2README中的说明可能是盲目地从其他地方复制过来的。我必须承认,我并不完全理解autoconf工具链的每个细节;它基本上是一组生成和用于创建配置脚本的宏(而配置脚本则为编译和安装过程奠定了基础)。我从未需要微调这些东西,所以我并不是专家,但在这里有一些相当详尽的解释:链接 - sk29910
当执行配置脚本时(如AX_PTHREAD宏),我遇到了未定义的宏错误。这些宏通常被定义在一个名为'm4'的子文件夹中。根据sebastian_k的回答,将autoconf替换为autoreconf解决了我的问题。 - logion
22给程序员们的提示:请停止使用automake工具链。拜托了 - Qix - MONICA WAS MISTREATED
2@Qix,请你能解释一下吗?为什么呢? - Sergei Krivonos
8@Sergei,这个东西乱七八糟的,慢得要命,而且经常出问题。它会弄乱定义,并且非常“神奇”。它处理依赖关系的方式(或者说没有处理)导致错误信息晦涩难懂,而它生成的文件在最好的情况下也很难读,最糟糕的情况下则是一团糟。 - Qix - MONICA WAS MISTREATED
@Qix非常感谢你的解释。你觉得有哪些替代方案? - Sergei Krivonos
5@Sergei 在我看来,CMake是目前最可行的选择。我相信在(不久的)将来会有更好的替代方案出现。 - Qix - MONICA WAS MISTREATED
发现这一系列的命令非常有帮助! - memnoch_proxy
1将此保存到~/bin/autohell.sh以备将来(滥用)之用。 - kfix
@Qix 有关automake工具链(我更喜欢称之为GNU构建系统)的指责完全是错误的,但我同意不使用它的建议。这是一个很好的工具,但大多数用户使用它的方式是错误的,所以最好不要使用它。 - Franklin Yu

嗯,我尝试了sebastian_k的答案,但对我没用(./configure在中途崩溃,并显示了一个非常奇怪的错误)。
然而,对我有效的是复制了我找到的这个构建日志中使用的指令。
简短版本(这样你就不必自己费力去查看了)是:
$ autoreconf -vif
$ ./configure --prefix=/usr/lib/erlang/lib
$ make
$ sudo make install

21+1. autoreconf -i 是正确的答案(通常可以选择使用 vf)。 - Nemo
2+1. 这是唯一一个对我有效的答案。 - weberc2
@Nemo 不错。虽然被接受的答案在技术上是可行的,但你的方法无疑是最简单的。 - Avindra Goolcharan

这个问题以及这里大部分的其他答案都源于对使用GNU Build System(又名Autotools)分发项目的方式的误解。实际上,在OP提到的Erlang XMPP library的情况下,误解似乎出现在开发人员那边。
正确获取软件的方法
如果你只是想编译和安装一个使用GNU Autotools发布的项目,那么你不应该从源代码控制系统中检出它。相反,你应该下载开发者提供的打包的源代码发布版本。这些通常以tarballs的形式分发在项目的网站上。对于完全托管在GitHub、Savannah或类似托管服务上的项目,这些tarballs通常会在某个标有“Download”或“Releases”的链接后面找到。你解压缩包并执行一些标准的./configure && make && sudo make install命令。就这样;你不需要调用任何GNU Autotools,甚至不需要在你的系统上安装GNU Autotools。
你作为用户不需要GNU Autotools来编译一个使用Autotools打包的项目的原因是开发者已经使用各种Autotools程序生成了一个“分发tarball”,可以用于在任何类Unix系统上构建软件。这个分发tarball包含一个高度可移植的configure脚本,它会扫描构建环境,检查依赖关系,并生成一个适合你系统的Makefile。
那么什么时候需要Autotools呢?
唯一需要自己安装和调用GNU Autotools的原因是如果你想对一个使用Autotools构建的项目进行开发工作。即使如此,除非你改变了项目的依赖关系,你可能也不需要Autotools。在这种情况下,你确实需要检出原始源代码,对Autotools特定的输入文件(configure.ac、Makefile.am等)进行适当的更改,并运行Autotools来生成一个新的configure文件。如果你想独立发布修改后的软件包,那么你将使用Autotools生成的Makefile来生成一个新的分发tarball,然后将该tarball发布到网络上的某个位置。
问题在于一些开发者将他们的源代码库公开可用,但却忽略了发布他们的发行压缩包(或者让人难以找到它们的发布位置)。例如,Erlang XMPP库的GitHub发布版是源代码库的压缩包,而不是作为GitHub发布版发布的发行压缩包。这样一来,如果没有GNU Autotools,就无法编译该项目,从而完全失去使用Autotools的初衷。
简而言之,GNU Autotools是开发者用来为用户创建可移植的源代码包。用户应该从这些源代码包下载并进行编译,而不是直接从源代码控制系统获取原始代码。如果开发者没有提供这些源代码包,那么他们就没有正确使用Autotools,并且应该轻轻地拿一条湿鱼扇他们一下,直到他们明白自己的错误。

这篇长帖子与问题有何关联?OP是否尝试使用Autotools?他们下载了一些软件并像您在第二段建议的那样运行了./configure && make && sudo make install - Pilot6
6这是相关的,因为OP下载的软件并不包含正确的配置脚本(而最新的源代码控制中的版本和发布的tarballs根本不包含配置脚本)。这里几乎所有的答案都告诉OP运行Autotools。虽然这可能解决问题,但重要的是要理解根本原因:开发人员应该负责运行Autotools,而他们没有正确地(或根本没有)执行这一步骤。 - Psychonaut
1这是一个很好的回答,虽然我喜欢“轻轻地用一条湿鱼拍打”的说法,但更合适的做法可能是明确提到正确的反应是向上游报告这个错误。 - William Pursell
1@WilliamPursell 我明白这是一个双关语。 :) - Psychonaut
@Psychonaut,你是不是建议我们从不使用非发布版本的库?例如,我是否应该使用一个很多年前就没有发布过的库,但是它有很多对主分支的有用的错误修复?我需要知道如何正确生成configure文件来实现这一点。在我的情况下,最后一个发布版本甚至无法被新的编译器/标准编译。 - pooya13
1@pooya13 再次强调正确使用自动工具的重要性。像使用自动工具的项目exmpp的开发者应该提供一个名为bootstrap或autogen.sh的脚本,它可以运行所有必要的命令来重新生成configure脚本和相关的支持文件。他们没有这样做,但至少在README中说明了要运行哪些命令。如果你想使用的软件的开发者没有提供这样的脚本或说明,请适当地进行更多的troutslapping。 - ryandesign

请按照以下步骤来解决这个问题:
sudo apt-get install autogen libtool shtool

然后进行安装。
sh autogen.sh --prefix=prefered_install_path
make 
make install 

谢谢,这解决了我的问题。 - FindOutIslamNow

我遇到过这个问题,并发现它是由于在configure.ac中的以下行引起的。
AC_CONFIG_AUX_DIR([build-aux])

这行代码本身并不是坏的,但是需要将其移动到configure.ac文件的顶部附近。

尝试从Mercurial存储库编译GNU Octave时,您可能会遇到这个问题。解决方法是在源代码根目录下运行./bootstrap命令。

我遇到了稍微不同的错误:
configure: error: 在 "." "./.." "./../.." 中找不到 install-sh、install.sh 或 shtool。
原来 configure 找不到 build-aux/install-sh。 我这样链接它: ln -s build-aux/install-sh .
然后就可以构建了。
希望对某人有所帮助!

sudo apt-get install automake autoconf
安装成功

我在尝试使用./configure配置源代码时遇到了类似的问题,并得到了与帖子中相同的错误。最终通过输入以下代码解决了我的问题:
sudo apt-get install autotools-dev

2错误:无法找到软件包autotools。 - Mauricio Scheffer
我也是。错误:无法找到软件包autotools。给你点踩了,抱歉。 - PJunior
我已经安装了那个软件包,不管它是什么。但是配置脚本还是出了问题。 - Boann

安装了autogen软件包后,wolfSSL构建中的此错误得到解决。
sudo apt-get install autogen libtool shtool