典型的./configure在Linux中做什么?

时间:2010-03-27 14:12:19

标签: linux build makefile configure

为什么有必要在makefile中指定所有内容?

3 个答案:

答案 0 :(得分:62)

通常,运行时配置脚本将:

  • 检查有关机器的一些细节 该软件将在哪个 安装。此脚本检查 很多依赖于您的系统。 使特定的软件工作 适当地,它可能需要很多 在你身上存在的东西 机器已经。如果您的系统缺少任何主要要求,配置脚本将exit,您无法继续安装,直到您获得所需的东西。

  • 创建要在下一步中使用的Makefile

答案 1 :(得分:32)

它运行一个脚本,通常生成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项目(configure / make / make install)时,Makefile实际上并不包含构建项目所需的所有内容,它是从Makefile.in模板生成的,以便在您键入“configure”时专门匹配您的系统”

答案 2 :(得分:5)

configure脚本从模板构建Makefile,替换为您要安装代码的位置以及用于构建程序的(C,C ++,Fortran,...)编译器所需的定义。从理论上说,它可以一步完成,除了有许多不同的配置可能更容易分阶段完成。 (例如,如果使用可用的多核机器构建大型程序,您可能希望指定发生一定数量的并行编译,这不是关于如何配置的问题。)