即使所有内容都已在makefile中指定,为什么还需要这样做?
通常,运行配置脚本会执行以下操作:
检查要安装软件的计算机的某些详细信息。此脚本在您的系统上检查许多依赖项。为了使特定软件正常工作,可能需要您的计算机上存在很多东西。 如果您的系统缺少任何重要要求,则配置脚本将退出,并且您无法继续安装,直到获取这些所需内容。
创建下一步中要使用的Makefile
。
它运行一个脚本,通常会生成 makefiles 和 "configure.h"。
该脚本是用宏语言 "m4" 编写的。顶级宏可以在 autoconf.ac 或 (在旧系统中) autoconf.in 中找到。这些宏会扩展成包含较低级别宏的内容,这些较低级别宏又会扩展成实际的测试,创建小型程序或任务以检查您的系统类型。
例如,AC_CHECK_HEADER([myheader.h],...) 可能会生成一个简短的 C 程序,如下所示:
#include "myheader.h"
int main(int argc, char** argv) {
return 0;
}
如果程序编译通过,则认为检查“通过”,否则它会“失败”。此类检查的状态通常会反映在config.h文件中。在通过检查时,您可能会在config.h中找到一行看起来像这样的内容:#define HAVE_MYHEADER_H 1
在一个失败的测试中,它可能看起来像是
#define HAVE_MYHEADER_H 0
当使用AM_INIT_AUTOMAKE宏配置autoconf时,如果包含测试结果的变量被导出,Makefile也可以引用测试结果。因此,如果需要的库位于几个不同的典型位置,或者"有效"的语法与您的标准工具之一(如tar、ar等)不同,或者首选工具不可用,则Makefile将能够使用不同的库位置、不同的工具语法或不同的工具集来正确构建项目。
因此,在处理Autotools项目(configure / make / make install)时,Makefile实际上并不包含构建项目所必需的所有内容,它是从Makefile.in模板生成的,以便在输入“configure”时专门匹配您的系统。
./configure --help
通常会给出可用选项列表。 - intuited