这个问题以及这里大部分的其他答案都源于对使用
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,并且应该
轻轻地拿一条湿鱼扇他们一下,直到他们明白自己的错误。