代码之家  ›  专栏  ›  技术社区  ›  Mask

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

  •  63
  • Mask  · 技术社区  · 16 年前

    尽管所有内容都在makefile中指定,但为什么有必要呢?

    3 回复  |  直到 15 年前
        1
  •  66
  •   codaddict    16 年前

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

    • 检查机器的一些细节 软件将在哪个平台上运行 安装。此脚本检查 正确地说,这可能需要很多 机器已经启动了。如果系统中缺少任何主要需求,configure脚本将 exit 你不能继续安装,除非你得到了那些需要的东西。

    • Makefile

        2
  •  33
  •   Edwin Buck    15 年前

    它运行一个脚本,该脚本通常生成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\u INIT\u AUTOMAKE宏中使用autoconf时,如果导出了包含测试结果的变量,Makefile还可以引用测试结果。因此,如果所需的库位于几个不同的典型位置,或者使用标准工具(如tar、ar等)的“what works”语法不同,或者首选工具不可用,那么Makefile仍然能够使用不同的库位置、不同的工具语法正确地构建项目,或者一套不同的工具。

        3
  •  7
  •   Donal Fellows    16 年前

    配置脚本从模板中构建Mag文件,用诸如要安装代码的地方和用于构建程序的(C,C++,FORTRAN,…)编译器需要什么定义来替代。理论上说,这一切都可以在一个步骤中完成,除了有许多不同的配置可能,这是更容易做到的阶段(例如,如果使用多核计算机构建一个大型程序,您可能希望指定发生一定数量的并行编译,这与如何配置无关。)