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

Mas*_*ask 63 linux makefile build configure

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

cod*_*ict 62

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

  • 检查有关将要安装软件的计算机的一些详细信息.此脚本检查系统上的大量依赖项.为使特定软件正常工作,可能需要在您的机器上存在很多东西.如果您的系统缺少任何主要要求,配置脚本将exit无法继续安装,直到您获得所需的东西.

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

  • 永远不知道makefile是由configure之前创建的:) (3认同)
  • 它还提供了一个配置(恰当)编译选项的接口.`./configure --help`会(通常是?)给出一个可用选项列表. (2认同)

Edw*_*uck 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;
}
Run Code Online (Sandbox Code Playgroud)

如果程序编译,则检查被视为"通过",否则它"失败".此类检查的状态通常会反映在config.h文件中.在通过检查时,您可能会在config.h中找到如下所示的行:

#define HAVE_MYHEADER_H 1
Run Code Online (Sandbox Code Playgroud)

在测试失败时,它可能看起来像

#define HAVE_MYHEADER_H 0
Run Code Online (Sandbox Code Playgroud)

当配置为在AM_INIT_AUTOMAKE宏中使用autoconf时,如果导出包含测试结果的变量,Makefile也可以引用测试结果.因此,如果所需的库位于几个不同的典型位置,或者使用某个标准工具(如tar,ar等)的"什么有用"的语法不同,或者首选工具不可用,则Makefile将是能够使用不同的库位置,不同的工具语法或不同的工具集来正确构建项目.

所以有Autotools的项目打交道时(配置/制作/ make install)并Makefile文件确实不包含一切必要措施,构建项目,它是从Makefile.in模版生成当你键入"配置",专门匹配您的系统.

  • 不,配置脚本是指令的扩展(也使用m4语言),这些指令放在configure.ac(或旧系统configure.in)文件中.运行autoconf将从configure.ac生成配置脚本,但有时您需要修补宏库.当你需要这样做时,运行aclocal并尝试验证所有的宏都已正确定义(并可用于下一次autoconf执行). (11认同)
  • 必要的核心思想是在大学中教授的,但是,它们是在不同的非构建环境中教授的。通常很少有人会想到将它们应用到构建系统中,直到他们的构建系统开始以某种方式失败。也就是说,需要学习构建系统、幂等性、(依赖)映射、(平台)集分析、验证(又名测试)等背后的理论。大多数人在购买工具时将这些知识留在门口,然后他们唯一关心的事情。这类似于学习如何使用 MS Word 而不是学习如何写作。 (3认同)

Don*_*ows 5

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