尽管在makefile中指定了所有内容,但为什么有必要这样做呢?
Answers:
它运行一个脚本,该脚本通常生成makefile和“ 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项目(配置/ make / make安装)时,Makefile实际上并不包含构建项目所需的所有内容,它是由Makefile.in模板生成的,以在您键入“ configure”时专门匹配您的系统。
configure
文件非常大,它们是手动编写的吗?