问题描述
这是我第一次尝试在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
后,我得到错误
Cannot find install-sh, install.sh, or shtool in ac-aux
谷歌几乎没有任何帮助。根本不确定我应该做什么。任何帮助将非常感激
最佳解决方法
我知道它使用以下工具创建配置脚本:
libtoolize --force
aclocal
autoheader
automake --force-missing --add-missing
autoconf
./configure
我没有所有的依赖关系,所以我现在不能测试它,但这通常是如何从ac文件创建配置脚本的。
次佳解决方法
那么,我试过sebastian_k的答案,它不适用于我(./configure
中途崩溃与一个非常奇怪的错误)。
但是,对于我来说,复制这个build log I found中使用的指令是什么
简短的版本(所以你不必自己穿过它)是:
$ autoreconf -vif
$ ./configure --prefix=/usr/lib/erlang/lib
$ make
$ sudo make install
第三种解决方法
这个问题以及这里的大多数其他答案是由于误解了如何分发使用GNU Build System(又名Autotools)的项目而产生的。事实上,就OP提到的Erlang XMPP library而言,误解似乎是开发者的一部分。
以正确的方式获得软件
如果您只想编译并安装GNU Autotools发布的项目,那么您不应该从源代码管理系统中检查它。您应该下载由开发人员提供的打包版本。这些通常采用在项目网站上分发的tarball的形式。对于完全托管于GitHub,Savannah或某些类似托管服务的项目,通常会在标有”Download”或”Releases”的链接后面找到这些tarball。您解开软件包并说出标准./configure && make && sudo make install
咒语的一些变体。就这样;您不需要调用任何GNU Autotools,甚至不需要在系统上安装GNU Autotools。
您,用户不需要GNU Autotools编译Autotools-packaged项目的原因是,开发人员已经使用各种Autotools程序生成”distribution tarball”,该程序可用于在任何Unix-like系统上构建软件。分发tarball包含一个高度可移植的configure
脚本,用于扫描构建环境,检查依赖关系并构建一个为您的系统定制的Makefile
。
那么你什么时候需要Autotools?
您需要自己安装和调用GNU Autotools的唯一原因是您想对使用Autotools构建的项目进行开发工作。即使如此,除非您更改项目的依赖关系,否则您可能不需要Autotools。在这种情况下,您确实需要检出原始源,对Autotools-specific输入文件(configure.ac
,Makefile.am
等)进行适当更改,然后运行Autotools以生成新的configure
文件。如果您想独立发布修订后的软件包,那么您可以使用由Autotools生成的Makefile生成新的分发tarball,然后将该tarball发布到某个在线的地方。
问题在于一些开发人员将他们的源代码库公开发布,但忽略发布他们的发行版tarball(或者很难找到他们发布的地方)。例如,Erlang XMPP library’s GitHub Releases不是publishing their distribution tarballs as GitHub Releases,而是原始资源库的tarball。这使得在没有GNU Autotools的情况下编译该项目成为了不可能的事情,这首先破坏了使用Autotools的全部目的。
长话短说总结
GNU Autotools是开发人员用来为用户制作便携式源代码包的东西。用户应该从这些源代码包下载和编译,而不是源代码控制系统的原始代码。如果开发人员不提供这些源代码包,那么他们没有正确使用Autotools,并且应该是gently slapped with a wet trout,直到他们看到他们的方式错误。
第四种方法
我遇到了这个问题,并发现它是由于configure.ac
中的以下行:
AC_CONFIG_AUX_DIR([build-aux])
这条线本身并不坏,但它需要移近configure.ac
文件的顶部。