【发布时间】:2015-01-06 01:49:14
【问题描述】:
我目前正在学习如何使用autoconf/automake 工具链。我似乎对这里的工作流程有一个大致的了解——基本上你有一个configure.ac 脚本,它生成一个可执行的configure 文件。生成的configure脚本然后由最终用户执行以生成Makefiles,因此可以构建/安装程序。
所以典型的最终用户的安装基本上是:
./configure
make
make install
make clean
好的,现在我很困惑:
作为开发人员,我注意到自动生成的配置脚本有时无法运行,并且会出现以下错误:
config.status: error: cannot find input file: `somedir/Makefile.in'
这让我很困惑,因为我认为配置脚本应该生成Makefile.in。所以谷歌搜索了一些答案,我发现这可以用autogen.sh 脚本来解决,它基本上“重置”了autoconf 环境的状态。典型的autogen.sh 脚本类似于:
aclocal \
&& automake --add-missing \
&& autoconf
好吧好吧。但作为终生下载无数压缩包的最终用户,我从未不得不使用autogen.sh 脚本。我所做的只是解压缩 tarball,然后执行通常的 configure/make/make install/make clean 例程。
但作为现在使用 autoconf 的开发人员,除非您先运行autogen.sh,否则configure 似乎不会真正运行。所以我觉得这很令人困惑,因为我认为最终用户不应该运行autogen.sh。
那么为什么我必须先运行autogen.sh 才能让配置脚本找到Makefile.in?为什么配置脚本不直接生成它?
【问题讨论】:
-
GNU Autoconf(或者可能是 GNU Automake)带有一个方便的
autoreconf脚本,它与autogen.sh做同样的事情等等。至于为什么需要运行它,在somedir子目录下有Makefile.am供Automake查找somedir/Makefile.am并从中生成somedir/Makefile.in吗? -
如果有
autoreg.sh脚本,则运行它。如果没有,则运行autoupdate && autoreconf -f -i。两者都应该生成一个configure供您运行。遗憾的是 Autotools 手册中没有明确说明,但它与 Autotools 的课程相当。顺便说一句,我相信autogen.sh是autoreconf -f -i的包装脚本(可能带有详细选项)。
标签: makefile configure autoconf