Linux中典型的./configure有什么作用?


Answers:


66

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

  • 检查有关将在其上安装软件的计算机的一些详细信息。该脚本检查系统上是否有很多依赖项。为了使特定软件正常运行,可能需要在计算机上存在很多东西。如果系统上缺少任何主要要求,则配置脚本将exit并且您无法继续安装,直到获得那些必需的东西。

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


4
从来不知道makefile是由configure之前创建的:)
Mask

2
它还提供了一个界面来配置(适当地)编译选项。 ./configure --help(通常?)会列出可用选项。
直觉

33

它运行一个脚本,该脚本通常生成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文件非常大,它们是手动编写的吗?
掩盖

11
不,configure脚本是对指令的扩展(也使用m4语言),这些指令位于configure.ac(或在较旧的系统configure.in)文件中。运行autoconf将从configure.ac生成configure脚本,但是有时您需要修补宏库。当您需要执行此操作时,请运行aclocal,它将尝试验证是否正确定义了所有宏(并可用于下一次autoconf执行)。
Edwin Buck,2010年

我认识的每个人似乎都在学习过程中没有正式学习过这些东西。它实际上是在大学教授的吗?
TrojanName 2011年

1
必要的核心思想是在大学中教授的,但是,它们是在不同的非构建环境中教授的。通常很少有人认为将其应用于构建系统,直到其构建系统开始以某种方式失效为止。就是说,正在学习构建系统,幂等性,(依赖性)映射,(平台)集合分析,验证(即测试)等背后的理论。大多数人在购买工具时就把这些知识搁在了门上,然后他们唯一关心的事情。这类似于学习如何使用MS Word,而不是学习如何编写。
埃德温·巴克

6

配置脚本从模板中生成Makefile,替换为要在其中安装代码的位置以及用于生成程序的(C,C ++,Fortran等)编译器所需的定义。从理论上讲,所有步骤都可以完成,只是存在许多不同的配置,因此分阶段更容易完成。(例如,如果使用可用的多核计算机来构建大型程序,则可能需要指定发生一定数量的并行编译,这与事物的配置无关。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.