title: ./configure 脚本date: 2021-05-15 13:25:02.323

updated: 2021-05-15 14:13:43.273
url: /?p=159
categories: GCC
tags: gcc

./configure是甚?

GCC源代码树根目录中的一个脚本。用于设置配置值和创建GCC编译程序必需的make 程序的描述文件。换句话说,configure脚本为了让一个程序能够在各种不同类型的机器上运行而设计的。在使用make编译源代码之前,configure会根据自己所依赖的库而在目标机器上进行匹配。

configure本质上是一个shell脚本。为什么叫configure?嗯,约定俗成,没什么大道理。然后,这个脚本根据所在的系统环境生成makefile文件。

configure脚本运行时扫描当前环境,生成一个名为config.status的子脚本。子脚本将Makefile.in文件转换为适应于当前系统环境的Makefile文件。

‘configure’脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的.带上’–help’选项执行’configure’脚本可以看到可用的所有选项.尽管许多选项是很少用到的,但是当你为了特殊的需求而configure一个包时,知道他们的存在是很有益处的。

简单来说,我们在windows安装软件的时候,点击安装包,大多数程序可以配置默认选项,也可以自定义选项,比如程序的路径,大多数软件都是默认C盘,我们可以自定义其它盘,当然,在Linux中,是没有分盘符的,但是我们可以设置路径。也就因为这样,就像我们上面所说的一样,configure选项特别多,每个软件的配置也是不太相同。

./configure的选项

选项 介绍
–cache-file=FILE configure’会在你的系统上测试存在的特性(或者bug!).为了加速随后进行的配置,测试的结果会存储在一个cache file里.当configure一个每个子树里都有’configure’脚本的复杂的源码树时,一个很好的cache file的存在会有很大帮助.
–help
–no-create
–quiet –silent
–version
–prefix=PEWFIX
–exec-prefix=EPREFIX
–bindir=DIR
–sbindir=DIR
–libexecdir=DIR
–datadir=DIR
–sysconfdir=DIR
–sharedstatedir=DIR
–localstatedir=DIR
–libdir=DIR
–includedir=DIR
–oldincludedir=DIR
–infodir=DIR
–mandir=DIR
–srcdir=DIR
–program-prefix=PREFIX
–program-suffix=SUFFIX
–program-transform-name=PROGRAM
–build=BUILD
–host=HOST
–target=GARGET
–disable-FEATURE
-enable-FEATURE[=ARG]
–with-PACKAGE[=ARG]
–without-PACKAGE
–x-includes=DIR
–x-libraries=DIR

GNU build system

https://www.gnu.org/software/automake/faq/autotools-faq.html

这个工具能够帮助我们生成configure脚本。GNU build system,又叫做Autotools。

这个工具查询当前系统的环境变量、平台架构、当前所依赖的库以及他们的位置,然后根据这些信息去make,这样就能实现同一套代码仅需configure一下就可以在不同的unix/linux系统中编译运行。

Autotools包含的命令有autoconfautomakelibtool

autoconf

autoconf命令的主要作用是创建configure。它基于configure.ac文件生成configure文件。

autoscan

autoscan是autoconf的辅助命令,它创建一个预备的configure(configure.scan),作为autoconf命令的输入。我们可以按需在这个文件上进行添加内容,修改之后手工修改名字变成configure.ac文件。

autoheader

autoheader也是autoconf的辅助命令,用于生成一个configure的模版头文件config.h.in。

automake

automake命令的主要作用是创建Makefile。以Makefile.am和configure.ac为输入,以Makefile.in为输出。Makefile.in在configure执行时用于生成Makefile。

libtool

libtool命令的主要作用是创建和使用可移植的共享(动态链接)库。

参考文献

  1. https://blog.csdn.net/duyuanhai/article/details/17353179?utm_medium=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-1.control
  2. https://www.jianshu.com/p/81916fba741c