gcc_configure
- 格式:doc
- 大小:94.50 KB
- 文档页数:7
configure的用法
configure是一个常用的命令行工具,用于配置和安装软件。
它通常用于编译和安装开源软件项目,用于生成Makefile并进行编译和安装。
configure的用法与大多数命令行工具相似,你可以在终端中输入configure命令,后跟选项和参数。
常见的选项包括--prefix、--with-xxx、--disable-xxx等,它们可以用于配置安装路径、开启或关闭某些功能等。
一般来说,使用configure进行编译和安装软件的步骤如下:
1. 解压源代码包,并进入该目录;
2. 运行configure命令,并指定需要的选项;
3. 如果configure运行成功,会生成Makefile文件;
4. 运行make命令进行编译;
5. 运行make install命令进行安装。
需要注意的是,在运行configure命令前,我们需要安装一些必要的依赖库和工具,例如编译器、开发库等。
此外,configure命令也可以接受一些特定的参数,例如--help、--version等,用于查看帮助信息和版本号。
总的来说,configure是一个非常实用的命令行工具,可以帮助我们快速配置和安装开源软件项目,提高开发效率和工作效率。
- 1 -。
linux configure写法在Linux中,配置脚本通常用于配置和编译软件包。
常见的配置脚本是configure脚本,它使用autoconf和automake工具生成。
一个简单的configure脚本的写法如下:```bash#!/bin/sh# 配置脚本开始# 检查是否安装了必要的工具if ! command -v gcc &> /dev/nullthenecho "编译该软件需要gcc编译器,请先安装gcc。
"exit 1fi# 定义变量prefix=/usr/localbindir=bindatadir=sharemandir=man# 检查参数if [ $# -ne 0 ]thenecho "用法: $0 [prefix]"exit 1fi# 生成Makefile文件aclocal -I m4autoheaderautomake --add-missing --copy --forceautoconf# 配置选项./configure --prefix=$prefix --bindir=$bindir --datadir=$datadir --mandir=$mandir || exit 1# 配置脚本结束```这是一个非常简单的configure脚本,它检查是否已经安装了gcc编译器,并定义了一些变量。
然后,它使用aclocal、autoheader、automake 和autoconf工具生成Makefile文件。
最后,它使用configure脚本进行配置,并指定了一些选项。
configure 参数在计算机领域中,configure是一个常用的命令,它用于配置软件包以便在特定的系统上进行编译和安装。
configure命令通常是由autotools工具链生成的,autotools是一套自动化构建工具,可以帮助开发者将软件包从源代码构建到二进制可执行文件。
configure参数是指在使用configure命令时可以传递给它的选项和参数,这些选项和参数可以影响软件包的编译、安装和运行。
configure参数主要分为三类:通用选项、编译选项和安装选项。
下面将详细介绍每个选项及其作用:1. 通用选项--help:显示帮助信息。
--version:显示软件包版本号。
--prefix=DIR:指定安装目录,默认为/usr/local。
--exec-prefix=DIR:指定可执行文件目录,默认为prefix目录。
--bindir=DIR:指定二进制文件目录,默认为exec-prefix/bin。
--sbindir=DIR:指定系统二进制文件目录,默认为exec-prefix/sbin。
--libdir=DIR:指定库文件目录,默认为prefix/lib。
--includedir=DIR:指定头文件目录,默认为prefix/include。
--datadir=DIR:指定数据文件目录,默认为prefix/share。
2. 编译选项--build=BUILD:指定编译系统类型,默认为当前系统类型。
--host=HOST:指定运行系统类型,默认为当前系统类型。
--target=TARGET:指定目标系统类型,默认为HOST。
--enable-feature:启用某个功能。
--disable-feature:禁用某个功能。
--with-PACKAGE[=ARG]:指定要使用的库或工具包,ARG表示库或工具包的路径。
--without-PACKAGE:禁用某个库或工具包。
3. 安装选项--disable-shared:禁用共享库,只编译静态库。
Configure是个可执行脚本,他有很多选项,使用命令./configure –help输出周详的选项列表
很多的选项,个人认为,您能够忽略其他的一切,但请把--prefix加上。
这里以安装supersparrow-0.0.0为例:
我们打算把他安装到目录 /usr/local/supersparrow,于是在supersparrow-0.0.0目录执行带选项的脚本./configure –prefix=/usr/local/supersparrow,执行成功后再编译、安装(make,make install);安装完成将自动生成目录supersparrow,而且该软件任何的文档都被复制到这个目录。
为什么要指定这个安装目录?是为了以后的维护方便,假如没有用这个选项,安装过程结束后,该软件所需的软件被复制到不同的系统目录下,很难弄清楚到底复制了那些文档、都复制到哪里去了—基本上是一塌糊涂。
用了—prefix选项的另一个好处是卸载软件或移植软件。
当某个安装的软件不再需要时,只须简单的删除该安装目录,就能够把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。
一个小选项有这么方便的作用,建议在实际工作中多多使用。
centos7 编译gcc在CentOS 7上编译GCC需要进行一些步骤。
首先,您需要确保您的系统已经安装了必要的依赖项。
这些依赖项包括Bison、Flex、Libiberty、Texinfo和gettext。
您可以使用以下命令安装这些依赖项:```shellsudo yum install bison flex libiberty texinfo gettext```接下来,您需要从GCC的官方网站下载源代码。
您可以使用wget或curl命令来下载源代码。
例如GCC 9.3.0下载完成后,您需要解压缩源代码。
您可以使用以下命令来解压缩:```shelltar -zxvf gcc-9.3.0.tar.gz```现在,您已经准备好开始编译GCC了。
您可以使用以下命令来配置和编译GCC:```shellcd gcc-9.3.0./configure --prefix=/usr/local/gcc-9.3.0makesudo make install```这将配置GCC,编译它,并将编译后的文件安装到指定的目录中。
请注意,在运行configure命令时,您可以选择不同的选项来自定义您的GCC构建。
您可以查看GCC的官方文档以了解更多信息。
完成编译和安装后,您可以通过运行以下命令来验证GCC是否成功安装:```shell/usr/local/gcc-9.3.0/bin/gcc --version```这将显示已安装的GCC版本信息。
如果您看到正确的版本信息,则表示您已成功在CentOS 7上编译和安装了GCC。
1。
gcc12.3 自编译
要自行编译GCC 12.3版本,你需要进行一系列步骤。
首先,你需要确保你的系统上已经安装了必要的开发工具,比如GCC、Make 和一些必要的库。
接下来,你需要从GCC的官方网站上下载GCC 12.3的源代码。
然后,你需要解压下载的源代码文件并进入解压后的目录。
在进入源代码目录后,你需要运行配置脚本,这可以通过运行"./configure"命令来实现。
这个命令会检查你的系统环境并生成相应的Makefile,以便后续编译使用。
接下来,你需要运行"make"命令来编译GCC。
这个过程可能会持续一段时间,具体时间取决于你的系统性能和编译选项的设置。
一旦编译完成,你可以运行"make install"命令来安装编译好的GCC到你的系统中。
这将把GCC的可执行文件和库文件复制到系统默认的安装目录中。
需要注意的是,编译GCC是一个复杂的过程,可能会涉及到一些依赖性问题和系统配置。
你可能需要在编译过程中解决一些错误
和警告。
另外,编译GCC需要一定的系统资源,包括内存和磁盘空间。
最后,一旦你成功编译并安装了GCC 12.3,你就可以在命令行中使用新版本的GCC了。
记得在编译和安装过程中仔细阅读官方文档,以确保你的操作是正确的。
祝你好运!。
configure的用法
configure是一种用于配置软件包的工具,可以帮助用户根据自己的需要定制软件包的安装和编译方式。
使用configure可以轻松地实现自定义的安装路径、编译选项和参数等。
在配置软件包时,常常需要使用configure脚本,该脚本会检测编译环境、依赖库和系统配置等信息,并生成Makefile文件,以便用户进行编译和安装。
configure脚本通常可以通过以下命令来使用:
./configure [选项]
其中,选项可以根据不同的软件包而有所不同,常见的选项包括: --prefix:指定安装路径
--with-xxx:指定依赖库xxx的路径
--enable-xxx:启用某些功能
--disable-xxx:禁用某些功能
--host:指定目标平台
使用configure时需要根据实际情况选择适当的选项,并且要先安装好所需的依赖库。
在执行完configure后,一般需要使用make
命令进行编译,然后使用make install命令进行安装。
configure
是一个非常实用的工具,在软件包的安装和配置中发挥着重要的作用,值得深入学习和掌握。
- 1 -。
configure关于交叉编译的参数设置configure的参数众多,一般包括如下:--srcdir=DIR这个选项对安装没有作用.他会告诉'configure'源码的位置.一般来说不用指定此选项,因为'configure'脚本一般和源码文件在同一个目录下.--program-prefix=PREFIX指定将被加到所安装程序的名字上的前缀.例如,使用'--program-prefix=g'来configure一个名为'tar'的程序将会使安装的程序被命名为'gtar'.当和其他的安装选项一起使用时,这个选项只有当他被`Makefile.in'文件使用时才会工作.--program-suffix=SUFFIX指定将被加到所安装程序的名字上的后缀.--program-transform-name=PROGRAM这里的PROGRAM是一个sed脚本.当一个程序被安装时,他的名字将经过`sed-e PROGRAM'来产生安装的名字.--build=BUILD指定软件包安装的系统平台.如果没有指定,默认值将是'--host'选项的值.--host=HOST指定软件运行的系统平台.如果没有指定,将会运行`config.guess'来检测.--target=GARGET指定软件面向(target to)的系统平台.这主要在程序语言工具如编译器和汇编器上下文中起作用.如果没有指定,默认将使用'--host'选项的值.--disable-FEATURE一些软件包可以选择这个选项来提供为大型选项的编译时配置,例如使用Kerberos认证系统或者一个实验性的编译器最优配置.如果默认是提供这些特性,可以使用'--disable-FEATURE'来禁用它,这里'FEATURE'是特性的名字.例如:$./configure--disable-gui-enable-FEATURE[=ARG]相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用'--enable-FEATURE'来起用它.这里'FEATURE'是特性的名字.一个特性可能会接受一个可选的参数.例如:$./configure--enable-buffers=128`--enable-FEATURE=no'与上面提到的'--disable-FEATURE'是同义的.--with-PACKAGE[=ARG]在自由软件社区里,有使用已有软件包和库的优秀传统.当用'configure'来配置一个源码树时,可以提供其他已经安装的软件包的信息.例如,倚赖于Tcl和Tk的BLT器件工具包.要配置BLT,可能需要给'configure'提供一些关于我们把Tcl和Tk装的何处的信息:$./configure--with-tcl=/usr/local--with-tk=/usr/local'--with-PACKAGE=no'与下面将提到的'--without-PACKAGE'是同义的.--without-PACKAGE有时候你可能不想让你的软件包与系统已有的软件包交互.例如,你可能不想让你的新编译器使用GNU ld.通过使用这个选项可以做到这一点:$./configure--without-gnu-ld--x-includes=DIR这个选项是'--with-PACKAGE'选项的一个特例.在Autoconf最初被开发出来时,流行使用'configure'来作为Imake的一个变通方法来制作运行于X的软件.'--x-includes'选项提供了向'configure'脚本指明包含X11头文件的目录的方法.--x-libraries=DIR类似的,'--x-libraries'选项提供了向'configure'脚本指明包含X11库的目录的方法.==红色高亮这一个参数是我们交叉编译应用的重点:configure--host=arm-linux这就是arm的交叉编译选项;configure--host=mipsel-linux这个就是mipsel的交叉编译选项。
gcc 编译configure语句摘要:一、GCC 编译器简介二、configure 语句的作用三、configure 语句的使用方法四、configure 语句的参数详解五、configure 语句在GCC 编译过程中的应用正文:GCC(GNU Compiler Collection)是一个广泛使用的编译器套件,支持多种编程语言,如C、C++、Java、Fortran 等。
GCC 通过configure 语句来配置编译器,以满足不同平台和用户的需求。
configure 语句是GCC 编译器中一个非常关键的部分,主要用于读取用户输入的配置选项,并根据这些选项来生成相应的编译器。
configure 语句可以识别各种选项,如编译器类型、优化级别、目标平台等,从而让用户能够针对特定需求定制编译器。
使用configure 语句的方法很简单。
首先,确保已经安装了GCC 编译器,然后在终端中进入GCC 的安装目录。
接下来,运行以下命令:```./configure [options]```其中,`[options]`是用户需要传递给configure 的参数。
这些参数可以包括编译器类型(如gcc 或g++)、优化级别(如-O2 或-O3)、目标平台(如x86_64-linux-gnu)等。
configure 语句的参数有很多,具体可以参考GCC 官方文档。
以下是一些常用的参数:- `--help`:显示configure 语句的帮助信息。
- `--version`:显示GCC 编译器的版本信息。
- `--host`:指定目标平台的类型。
- `--target`:指定生成编译器的目标平台。
- `--prefix`:指定编译器安装的目录。
- `--with-xxx`:指定需要使用的库或工具。
在执行configure 语句后,根据提示进行交互式操作,或者直接使用`make`命令来编译生成编译器。
最后,可以使用`make install`命令将编译器安装到指定的目录。
gcc 编译configure语句摘要:一、GCC 编译器简介1.GCC 的发展历程2.GCC 的重要性3.GCC 的应用领域二、编译configure 语句1.configure 语句的作用2.configure 语句的语法结构3.configure 语句的参数及用法三、GCC 编译configure 语句实例1.简单的GCC 编译configure 语句实例2.高级的GCC 编译configure 语句实例四、GCC 编译configure 语句常见问题及解决方法1.编译configure 语句失败的原因2.解决编译configure 语句失败的方法正文:一、GCC 编译器简介GCC(GNU Compiler Collection)是一款由GNU 计划开发的编程语言编译器。
它支持多种编程语言,如C、C++、Java、Fortran 等。
GCC 具有高度可移植性、强大的功能和优秀的性能,被广泛应用于各种操作系统和开发环境中。
二、编译configure 语句1.configure 语句的作用configure 语句是GCC 编译器中用于配置编译选项的关键部分。
它可以根据不同的编译目标和平台,自动选择合适的编译选项,以简化编译过程。
2.configure 语句的语法结构configure 语句的基本语法结构如下:```configure [options]```其中,`options`为可选项,用于指定具体的编译选项。
3.configure 语句的参数及用法configure 语句的参数包括:- `--host`:指定目标主机。
- `--target`:指定目标平台。
- `--prefix`:指定安装目录。
- `--with-xxx`:指定需要使用的库或工具。
三、GCC 编译configure 语句实例1.简单的GCC 编译configure 语句实例以下是一个简单的GCC 编译configure 语句实例,用于编译一个名为`example.c`的C 语言源文件:```gcc -o example example.c```2.高级的GCC 编译configure 语句实例以下是一个高级的GCC 编译configure 语句实例,用于编译一个名为`myprog`的C++程序,并使用`-Wall`选项开启编译器警告:```gcc -o myprog myprog.cpp -Wall```四、GCC 编译configure 语句常见问题及解决方法1.编译configure 语句失败的原因编译configure 语句失败的原因可能包括:- 语法错误:configure 语句的语法有误。
configure 编译摘要:1.编译的概念与作用2.configure文件的编写与解析3.编译流程与配置过程的关联4.编译工具的使用与实践5.编译中的常见问题及解决方法6.总结与展望正文:一、编译的概念与作用编译,简单来说,就是将高级编程语言编写的源代码转换为计算机可以执行的低级机器语言的过程。
编译器作为实现这一转换的工具,起着至关重要的作用。
它不仅能够提高程序的可读性和维护性,还能有效提升程序的执行效率。
二、configure文件的编写与解析在编译过程中,configure文件是一个关键性的配置文件,它包含了编译过程中所需的各种参数和选项。
configure文件通常采用shell脚本编写,以便于进行自动化配置。
编写configure文件时,需要注意以下几点:1.明确区分平台依赖与程序依赖。
2.使用恰当的变量命名,以便于后续的解析。
3.编写清晰的注释,方便后续维护。
三、编译流程与配置过程的关联编译流程通常包括以下几个步骤:预处理、编译、汇编和链接。
在这些步骤中,配置过程起到了承前启后的作用。
配置过程主要是对configure文件进行解析,提取出与编译相关的参数,并为编译过程准备好所需的环境。
四、编译工具的使用与实践在实际编译过程中,常用的编译工具有GCC、Clang、MSVC等。
这些编译器不仅支持多种编程语言的编译,还提供了丰富的编译选项。
在使用编译器时,需要注意以下几点:1.选择合适的编译器版本。
2.熟悉编译选项的用法,以便于优化程序性能。
3.了解编译器的局限性,避免陷入不必要的困境。
五、编译中的常见问题及解决方法在编译过程中,可能会遇到各种问题,如语法错误、链接错误等。
针对这些问题,可以采取以下解决方法:1.仔细阅读编译器给出的错误信息,了解问题所在。
2.使用调试工具,如GDB,定位问题根源。
3.修改源代码或配置文件,消除潜在的错误。
六、总结与展望编译是程序开发过程中不可或缺的一环。
掌握编译原理、合理编写配置文件、熟练运用编译工具,对于提高编程效率和程序质量具有重要意义。
GCC编译选项和环境变量https:///DLUTXIE/article/details/8176164本⽂由GCC⼿册翻译得到,英语能⼒有限,翻译得不太好,仅为⾃⼰做记录,⽤于理解GCC编译时头⽂件及库⽂件的查找路径问题。
-Idir表⽰增加dir为头⽂件的搜索路径,这个路径优先于系统的默认路径,所以⽤⾃⼰指定的头⽂件来替代系统默认的头⽂件。
但是不要⽤这个选项来指定路径不要包括供应商提供的系统头⽂件(这个情况可以⽤-isystem),如果有多个-I选项,则路径的搜索先后顺序是从左到右的。
,即在前⾯的路径会被选搜索。
另外,如果dir以=号开头即如–I=dir,⽽其中的=号为被sysroot前缀替换。
如果⼀个标准系统包含的⽬录或者⽤-isystem选项指定的⽬录同时⽤了-I选项,则-I选项会被忽略。
那个⽬录仍然会被搜索,只是和没有指定-I选项时⼀样。
这是为了确保GCC程序能过够修复系统头⽂件的bug和⾮故意的改变include_next指令的顺序。
如果你确实需要改变系统路径的搜索顺序,那你可以⽤”-nostdinc” 和/或者“-isystem”选项。
-nostdinc该选项指⽰不要搜索头⽂件的标准路径(即默认路径),⽽只搜索-I选项指定的路径和当前路径。
-isysroot dir该选项和—sysroot选项差不多,但只⽤于搜索头⽂件。
--sysroot=dir⽤dir作为头⽂件和库⽂件的逻辑根⽬录,例如,正常情况下,如果编译器在/usr/include搜索头⽂件,在/usr/lib下搜索库⽂件,它将⽤dir/usr/include和dir/usr/lib替代原来的相应路径。
如果你同时使⽤了-isysroot选项,则—sysroot会应⽤于库⽂件的搜索⽽-isysroot会⽤于搜索头⽂件。
-system dir该选项⽤于搜索头⽂件,但该选项指定的⽬录估在-I选项指定的⽬录后搜索⽽在系统默认路径前搜索。
configure的用法Configure是一种常见的配置命令,它可以用于配置各种软件、应用程序以及系统设置等。
在使用configure命令之前,我们需要了解该命令的基本用法以及相关参数。
本文将围绕configure命令的用法,分步骤进行阐述。
第一步:下载源代码在使用configure命令之前,我们需要先下载源代码。
对于开源软件而言,一般都可以从官网或者源代码仓库进行下载。
在下载完源代码之后,我们需要将其解压缩到指定的目录中,这样才能进行后续的操作。
第二步:执行configure命令在解压缩源代码之后,我们需要进入到源代码的目录中,并执行configure命令。
该命令的基本用法如下所示:./configure [options]其中,options表示一些可选参数,这些参数可以影响configure命令的执行结果。
下面是一些常见的options及其含义:--prefix:指定安装路径,即安装后文件所在的目录。
--enable-xxx:启用某项功能,例如--enable-shared表示启用共享库。
--disable-xxx:禁用某项功能,例如--disable-debug表示禁用调试模式。
--with-xxx=:指定其他软件或库的安装路径,例如--with-zlib=/usr/local/zlib表示指定zlib库的安装路径。
--without-xxx:不使用某个软件或库,例如--without-sqlite 表示不使用sqlite数据库。
--help:显示帮助信息,例如./configure --help表示显示configure命令的帮助信息。
第三步:编译源代码在执行configure命令之后,我们需要进行编译。
通常情况下,我们可以使用make命令进行编译。
make命令会自动根据Makefile文件进行编译,生成可执行文件。
第四步:安装程序在编译完成之后,我们需要将生成的程序进行安装。
通常情况下,我们可以使用make install命令进行安装。
configure用法一、什么是c o n f i g u r e?c o nf ig ur e是一个用于生成可执行文件的脚本工具。
它主要用于在软件安装前进行一些预配置操作,包括检测系统环境、编译选项的设置以及依赖库的检查等。
co n fi gu re脚本通常是由Au to co nf自动生成的,是一个非常重要的自动化配置工具。
二、使用c onfigur e的步骤使用co nf ig ur e脚本的步骤包括以下几个方面:1.下载源代码:首先,我们需要从开发者的网站或软件仓库下载软件的源代码。
一般情况下,软件的网站会提供源代码的压缩包,我们可以通过下载并解压缩这个压缩包来获取源代码。
2.运行co nf ig ur e:解压缩源代码后,进入源代码所在的目录,在终端中运行"./c on fi gu r e"命令。
这将触发c on fi gu re脚本的执行。
3.配置选项:c on fig u re脚本会根据当前系统的环境和用户的需求,生成一个适应当前环境的Ma ke fi le文件。
我们可以通过配置选项来调整生成的M ak ef il e文件,从而满足我们的需求。
4.编译和安装:配置完成后,我们可以运行"m ak e"命令进行软件的编译。
编译完成后,运行"ma ke in st al l"命令将软件安装到系统中。
三、c o n f i g u r e脚本中常用的选项c o nf ig ur e脚本中有很多常用的选项,可以根据实际需求进行配置。
下面列举了一些常用的选项:---p re fi x:指定安装目录。
默认情况下,软件会安装到/usr/lo ca l目录下,但我们可以使用--pr ef ix选项来指定其他的安装目录。
---w it h-xx x:指定依赖库的安装路径。
有些软件在编译时需要依赖其他的库,我们可以使用--w i th-x xx选项来指定这些依赖库的安装路径。
–cache-file=FILE’configure’会在你的系统上测试存在的特性(或者bug!).为了加速随后进行的配置,测试的结果会存储在一个cache file里.当configure 一个每个子树里都有’configure’脚本的复杂的源码树时,一个很好的cache file的存在会有很大帮助.–help输出帮助信息.即使是有经验的用户也偶尔需要使用使用’–help’选项,因为一个复杂的项目会包含附加的选项.例如,GCC包里的’configure’脚本就包含了允许你控制是否生成和在GCC中使用GNU汇编器的选项.–no-create’configure’中的一个主要函数会制作输出文件.此选项阻止’configure’生成这个文件.你可以认为这是一种演习(dry run),尽管缓存(cache)仍然被改写了.–quiet–silent当’configure’进行他的测试时,会输出简要的信息来告诉用户正在作什么.这样作是因为’configure’可能会比较慢,没有这种输出的话用户将会被扔在一旁疑惑正在发生什么.使用这两个选项中的任何一个都会把你扔到一旁.(译注:这两句话比较有意思,原文是这样的:If there was no such output, the user would be left wondering what is happening. By using this option, you too can be left wondering!)–version打印用来产生’configure’脚本的Autoconf的版本号.–prefix=PEWFIX’–prefix’是最常用的选项.制作出的’Makefile’会查看随此选项传递的参数,当一个包在安装时可以彻底的重新安置他的结构独立部分. 举一个例子,当安装一个包,例如说Emacs,下面的命令将会使Emacs Lisp file被安装到”/opt/gnu/share”:$ ./configure –prefix=/opt/gnu–exec-prefix=EPREFIX与’–prefix’选项类似,但是他是用来设置结构倚赖的文件的安装位置.编译好的’emacs’二进制文件就是这样一个问件.如果没有设置这个选项的话,默认使用的选项值将被设为和’–prefix’选项值一样.–bindir=DIR指定二进制文件的安装位置.这里的二进制文件定义为可以被用户直接执行的程序.–sbindir=DIR指定超级二进制文件的安装位置.这是一些通常只能由超级用户执行的程序.–libexecdir=DIR指定可执行支持文件的安装位置.与二进制文件相反,这些文件从来不直接由用户执行,但是可以被上面提到的二进制文件所执行.–datadir=DIR指定通用数据文件的安装位置.–sysconfdir=DIR指定在单个机器上使用的只读数据的安装位置.–sharedstatedir=DIR指定可以在多个机器上共享的可写数据的安装位置. –localstatedir=DIR指定只能单机使用的可写数据的安装位置.–libdir=DIR指定库文件的安装位置.–includedir=DIR指定C头文件的安装位置.其他语言如C++的头文件也可以使用此选项.–oldincludedir=DIR指定为除GCC外编译器安装的C头文件的安装位置.–infodir=DIR指定Info格式文档的安装位置.Info是被GNU工程所使用的文档格式.–mandir=DIR指定手册页的安装位置.–srcdir=DIR这个选项对安装没有作用.他会告诉’configure’源码的位置.一般来说不用指定此选项,因为’configure’脚本一般和源码文件在同一个目录下.–program-prefix=PREFIX指定将被加到所安装程序的名字上的前缀.例如,使用’–program-prefix=g’来configure一个名为’tar’的程序将会使安装的程序被命名为’gtar’.当和其他的安装选项一起使用时,这个选项只有当他被`Makefile.in’文件使用时才会工作.–program-suffix=SUFFIX指定将被加到所安装程序的名字上的后缀.–program-transform-name=PROGRAM这里的PROGRAM是一个sed脚本.当一个程序被安装时,他的名字将经过`sed -e PROGRAM’来产生安装的名字.–build=BUILD指定软件包安装的系统平台.如果没有指定,默认值将是’–host’选项的值.–host=HOST指定软件运行的系统平台.如果没有指定,将会运行`config.guess’来检测.–target=GARGET指定软件面向(target to)的系统平台.这主要在程序语言工具如编译器和汇编器上下文中起作用.如果没有指定,默认将使用’–host’选项的值.–disable-FEATURE一些软件包可以选择这个选项来提供为大型选项的编译时配置,例如使用Kerberos认证系统或者一个实验性的编译器最优配置.如果默认是提供这些特性,可以使用’–disable-FEATURE’来禁用它,这里’FEATURE’是特性的名字.例如:$ ./configure –disable-gui-enable-FEATURE[=ARG]相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用’–enable-FEATURE’来起用它.这里’FEATURE’是特性的名字.一个特性可能会接受一个可选的参数.例如:$ ./configure –enable-buffers=128`–enable-FEATURE=no’与上面提到的’–disable-FEATURE’是同义的. –with-PACKAGE[=ARG]在自由软件社区里,有使用已有软件包和库的优秀传统.当用’configure’来配置一个源码树时,可以提供其他已经安装的软件包的信息.例如,倚赖于Tcl和Tk的BLT器件工具包.要配置BLT,可能需要给’configure’提供一些关于我们把Tcl和Tk装的何处的信息:$ ./configure –with-tcl=/usr/local –with-tk=/usr/local‘–with-PACKAGE=no’与下面将提到的’–without-PACKAGE’是同义的.–without-PACKAGE有时候你可能不想让你的软件包与系统已有的软件包交互.例如,你可能不想让你的新编译器使用GNU ld.通过使用这个选项可以做到这一点:$ ./configure –without-gnu-ld–x-includes=DIR这个选项是’–with-PACKAGE’选项的一个特例.在Autoconf最初被开发出来时,流行使用’configure’来作为Imake 的一个变通方法来制作运行于X的软件.’–x-includes’选项提供了向’configure’脚本指明包含X11头文件的目录的方法.–x-libraries=DIR类似的,’–x-libraries’选项提供了向’configure’脚本指明包含X11库的目录的方法.在源码树中运行’configure’是不必要的同时也是不好的.一个由’configure’产生的良好的’Makefile’可以构筑源码属于另一棵树的软件包.在一个独立于源码的树中构筑派生的文件的好处是很明显的:派生的文件,如目标文件,会凌乱的散布于源码树.这也使在另一个不同的系统或用不同的配置选项构筑同样的目标文件非常困难.建议使用三棵树:一棵源码树(source tree),一棵构筑树(build tree),一棵安装树(install tree).这里有一个很接近的例子,是使用这种方法来构筑GNU malloc包:$ gtar zxf mmalloc-1.0.tar.gz$ mkdir build && cd build$ ../mmalloc-1.0/configurecreating cache ./config.cachechecking for gcc… gccchecking whether the C compiler (gcc ) works… yeschecking whether the C compiler (gcc ) is a cross-compiler… nochecking whether we are using GNU C… yeschecking whether gcc accepts -g… yeschecking for a BSD compatible install… /usr/bin/install -cchecking host system type… i586-pc-linux-gnu checking build system type… i586-pc-linux-gnu checking for ar… archecking for ranlib… ranlibchecking how to run the C preprocessor… gcc -E checking for unistd.h… yeschecking for getpagesize… yeschecking for working mmap… yeschecking for limits.h… yeschecking for stddef.h… yesupdating cache ../config.cachecreating ./config.status这样这棵构筑树就被配置了,下面可以继续构筑和安装这个包到默认的位置’/usr/local’:$ make all && make install。
configure原理configure原理是指在计算机程序编译、安装或部署的过程中,根据特定的配置文件或命令行参数来自定义程序的设置和行为。
它是软件开发和系统管理中常用的技术手段之一。
一般来说,configure原理包括以下几个主要步骤:1. 配置文件解析:configure一般会读取一个或多个配置文件,这些配置文件包含了一些需要自定义的参数。
在解析配置文件时,configure会根据一定的语法规则,识别并提取配置参数的值。
2. 参数替换:在配置文件解析过程中,可以使用占位符或变量来表示某些值,configure会根据配置文件中的这些占位符或变量的定义来替换它们为实际的值。
这样可以实现在不同环境下灵活配置程序的行为。
3. 检查依赖库和组件:configure通常会检查所需的依赖库和组件是否已经安装,并确定它们的版本是否符合要求。
如果缺少依赖项或版本不符合要求,configure可以给出相应的提示或警告。
4. 生成Makefile或脚本:根据配置文件中的参数和检查结果,configure会自动生成相应的构建脚本,如Makefile或其他脚本。
这些脚本包含了编译、链接和安装程序所需的具体步骤和命令。
5. 编译和安装:最后,通过执行生成的构建脚本,可以进行程序的编译和安装。
根据不同的操作系统和编译器,configure会自动调用相应的编译器和链接器,并将生成的可执行文件、库文件或其他资源安装到指定的目录中。
通过使用configure原理,开发人员和系统管理员可以更方便地配置和部署程序,提高了软件开发和系统管理的效率。
同时,用户在安装软件时也能够通过修改配置文件来个性化配置程序,以满足自己的需求。
总之,configure原理是一种灵活且可扩展的方式,用于根据配置文件或命令行参数来自定义程序的设置和行为。
它在软件开发和系统管理中扮演了重要的角色,为用户提供了更好的定制能力和使用体验。
主页/mara@引用请注明出处GCC系统配置程序configure的结构剖析玛瑞1996/11前言 (1)2系统配置程序configure的作用 (2)3系统配置程序configure的工作流程 (2)3.1版本及版权信息 (2)3.2取参数缺省值 (2)3.3命令行参数的处理 (2)3.4检查参数 (3)3.5系统名标准化 (3)3.6系统特殊配置参数的赋值 (4)3.7逻辑名与系统文件的链接 (4)3.8生成当前目录和各语言子目录的Makefile文件 (5)3.9生成config.status文件 (7)3.10配值成功信息的输出 (7)3.11成功退出configure (7)1前言GCC可被安装于不同体系结构的机型上,如典型的CISC PC机80386和80486,超流水线RISC结构的mips(SGI),超标量RISC结构的Sparc(SUN)和PowerPC(IBM),超流水线超标量RISC结构的Alpha(DEC),等。
GCC 有良好的前端和后端扩充接口,对其系统配置程序和系统生成程序的结构分析,是进一步开发系统程序(如增加后端平台,增强并行机制)的前提之一。
GCC是一个大系统,有近900个源文件(系统生成后有近千个文件),这些文件涉及各种语言和各种平台,因此分析系统配置程序和系统生成程序的结构,区分各源文件的作用,明确目标文件之间的联系,也是进一步开发应用程序的前提之一。
最重要的是,正确地安装GCC,合理而充分地使用GCC功能,成功地完成交叉编译,也需要对系统配置程序和系统生成程序的结构有清楚的认识。
另外,领会GCC系统构成的思路,对我们构造大的软件系统不无裨益。
以下,以GCC V2.6.0(94年推出)为对象,分析其系统安装程序:系统配置程序configure和系统生成程序makefile。
限于篇幅,将分别介绍它们。
2系统配置程序configure的作用1. 接受用户的安装参数和选项;设置系统缺省配置2. 处理配置参数1> 建立目标系统后端文件与逻辑文件名之间的链接,使编译系统能正确地在目标平台上生成2> 在模板文件Makefile.in中插入和修改与配置参数有关的信息,生成目标平台上的Makefile文件3> 生成config.status文件,记录本次安装的配置信息3系统配置程序configure的工作流程configure采用Bourne sh(即标准shell)编程,标准搜索路径是/bin/sh3.1版本及版权信息3.2取参数缺省值1. 处理$0,即命令行中configure命令名,取: srcdir=configure命令的前缀(路径)(${srcdir}表示GCC源代码所在的目录名)2. 取缺省的: prefix=/usr/local(${prefix}表示安装GCC编译程序的目录)3. 取缺省的: local_prefix=/usr/local(${local_prefix}表示安装头文件目录的目录)4. 取缺省的: exec_prefix=${prefix}(${exec_prefix}表示安装GCC可执行文件的目录)5. 取缺省的: gxx_include_dir=${libdir}/g++-include(${gxx_include_dir}表示安装g++头文件的目录)3.3命令行参数的处理逐个取命令行参数,给各变量赋值。
configure命令行参数如下:1. 在configure命令行上可以对以下参量赋值:1> srcdir : 表示GCC源文件所在目录2> prefix : 表示安装GCC编译程序的目录3> local-prefix : 表示安装头文件目录include的目录4> gxx-include-dir : 表示安装g++头文件的目录5> exec-prefix : 表示安装GCC可执行文件的目录6> host : 表示宿主系统名值格式一般为: "芯片名-公司名-操作系统名" (也可写别名)7> target : 表示目标系统名值格式同host8> build : 表示用以编译GCC的系统名值格式同host注意: 以上变量可以用两种格式在configure命令行赋值:<1> "--参数名=参数值"(或"--参数名简写=参数值" )<2> "--参数名参数值"(或"--参数名简写参数值" )2. 在configure命令行上还可以说明以下选项:1> "--with-gnu-as" : 说明GCC将使用GNU的汇编器(GAS)工作(只说明而不实际安装)2> "--with-gnu-ld" : 说明GCC将使用GNU的链接器工作(只说明而不实际安装)3> "--with-stabs" : 说明使用BSD stabs格式输出调试信息4> "--with-elf" : 说明使用elf格式输出调试信息5> "--nfp" : 说明系统没有浮点功能部件(FPU)注意: 这些选项可以简写; 对应于这些选项有如下赋值:gas=yes gnu_ld=yes stabs=yes elf=yes nfp=yes3. configure命令行上其它以'-'开头的如下选项及其简写被忽略(待开发)--with-* --without-* --enable --x --verbose4. configure命令行上其它以'-'开头的参数均导致错误退出5. 不以'-'开头的参数被取为target的值; 若${host}为空,则target的原值赋给host3.4检查参数1. 若${srcdir}为空串,则取srcdir为当前目录或父目录; 并判断这两个目录是否有GCC的源代码: 若没有,则错误退出2. 若config.status文件已在${srcdir}下,且${srcdir}不是当前目录,则错误退出3. 若${target}为空串,则错误退出4. 若${host}为空串,则host=${target}5. 若${build}为空串,则build=${host}3.5系统名标准化执行${srcdir}/config.sub文件,将${build},${host},${target}名标准化,送给变量canon_build,canon_host,canon_target3.6系统特殊配置参数的赋值系统名格式为: "芯片名-公司名-操作系统名" (或别名),其中芯片名有29种,公司名有34种,操作系统名有53种。
根据系统名、gas、gnu_ld、stabs、elf、nfp的取值,对${canon_build}、${canon_host}、${canon_target}分别给以下变量中的若干赋值:1. cpu_type : 取CPU名(有的系统名中芯片名与CPU名不同)2. xm_file : 取系统配置文件名3. tm_file : 取系统的机器宏定义文件名4. out_file : 取系统的汇编输出子例程文件名5. xmake_file : 取系统作为host时要在Makefile中插入的文件名6. tmake_file : 取系统作为target时要在Makefile中插入的文件名7. header_files : 取系统特有的头文件名表8. extra_passes : 取特定于系统的编译遍的名表9. extra_parts : 取特定于系统的链接所需的内容10. extra_objs : 取特定于系统的链接目标名表11. use_collect2 : 系统安装并使用collect2时置为yes12. target_cpu_default : 取替代缺省目标模式的值13. broken_install : 系统使用install.sh时置yes14. fixincludes : 取系统定位头文件所执行的文件名15. install_headers_dir : 取系统安装头文件的方式名16. md_cppflags : 取系统将md传给cpp时使用的参数表(若md不传给cpp则取空值)17. truncate_target : 若要求系统名不超过14个字符,则不空对没有赋值的一些必要参数针对canon_*置缺省值3.7逻辑名与系统文件的链接"Linked `逻辑名' to `${srcdir}/config/实际文件名' "3.8生成当前目录和各语言子目录的Makefile文件找到各语言子目录,其名表赋给subdirs(语言子目录的特征是:在当前目录下且含有文件config-lang.in)。
对当前目录和subdirs中的目录分别做以下各步:0. 置srcdir=目录名; 将${srcdir}下的Makefile.in拷贝给Makefile.tem1. 若${canon_host}的${srcdir}/config/${xmake_file}文件存在,则在Makefile.tem中"#### host ... "行后插入此文件; 并输出信息:"Merged ${xmake_file}."2. 若${canon_target}的broken_install值不为空,则改写Makefile.tem中INSTALL的值为: "INSTALL=${srcdir}/install.sh -c "3. 若${canon_target}的header_files值不为空,则改写Makefile.tem中的EXTRA_HEADERS值为: "EXTRA_HEADERS=${srcdir}/ginclude/头文件名1 "4. 若${canon_target}的extra_passes值不为空,则改写Makefile.tem中的EXTRA_PASSES值为: "EXTRA_PASSES=${extra_passes}"5. 若${canon_target}的extra_parts值不为空,则改写Makefile.tem中EXTRA_PARTS的值为: "EXTAR_PARTS=${extra_parts}"6. 若${canon_target}的extra_objs值不为空,则改写Makefile.tem中EXTRA_OBJS的值为: "EXTRA_OBJS=${extra_objs}7. 若${canon_target}的use_collect2值不为空,则在Makefile.tem的前面加入:"USE_COLLECT2=ldMAYBE_USE_COLLECT2=-DUSE_COLLECT2"8. 若${canon_target}的target_cpu_default值不为空,则在Makefile.tem中"# Makefile for GNU c compiler ."行前加入:"MAYBE_TARGET_DEFAULT=-DTARGET_CPU_DEFAULT=${target_cpu_de fault}9. 若${canon_target}的md_cppflags值不为空,则1> 若${host}=${build},则输出信息:"MD_DEPS=md.pre-cpp cppMD_CPP=./cpp"否则输出信息:"MD_deps=md.pre-cpp cppMD_CPP=HOST_CC -x -c -E"2> 在Makefile.tem前加入:"MD_CPPFLAGS=${md_cppflags}"3> 改写Makefile.tem中MD_FILE的值为: "MD_FILE=md"10. 若${canon_target}的${srcdir}/config/${tmake_file}文件存在,则在Makefile.tem中"#### target ... "行后插入此文件; 并输出信息: "Merged ${tmake_file}. "11. 若${srcdir}是当前目录,则在${srcdir}下的各目录中搜寻config-lang.in文件:1> 执行它们,获得关于缺省外语言的信息2>将所有缺省外语言的Make-lang.in文件合并在一起(它们是缺省外语言的make信息),插入在Makefile.tem中"#### language fragments "行后3> 修改Makefile.tem中如下变量为:"SUBDIRS=${srcdir}下所有含有config-lang.in文件的目录名LANGUAGES=GCC支持所有语言的名表(缺省语言名表+缺省外语言名表)COMPILERS=各种语言对应的编译器名表LANG_STAGESTUFF=缺省外语言在各阶段的目标名LANG_MAKEFILES=所有Make-lang.in在${srcdir}下的路径名LANG_DIFF_EXCLUDES=关于缺省外语言的其它信息"4> 在Makefile.tem中"#### language hooks "行后,对每个与语言有关的接口目标名及每个缺省外语言插入:"目标名: 语言名.目标名"5> 若${host}不支持符号链接,则将Makefile.tem的FLAGS_TO_PASS中CC置为:"CC=${CC} "6> 若存在缺省外语言,则输出信息:"Merged 缺省外语言的名表fragment(s). "12. 若${srcdir}是一个语言子目录,则将stage[1234]分别与../stage[1234]逻辑链接,以利于编译自检13. 改写Makefile.tem中如下变量:"target=${target}xmake_file=${xmake_file}tmake_file=${tmake_file}version=${version}prefix=${prefix}gxx_include_dir=${gxx_include_dir}local_prefix=${local_prefix}exec_prefix=${exec_prefix}FIXINCLUDE=${fixinclude}INSTALL_HEADERS_DIR=${canon_target}的install_headers_dir值"注: 1> ${xmake_file},${tmake_file}是${canon_target}的系统文件2> ${xmake_file}若为空,则取其值为../Makefile.in${tmake_file}若为空,则取其值为../Makefile.in3> ${version}是从${srcdir}/version.c中抽取的GCC版本号14. 若${host}=${target},则不是交叉编译:若${host}=${build},则直接将Makefile.tem拷贝给Makefile否则1> 在Makefile.tem前加: "build=${build}"2> 在Makefile.tem中"#### build ... "行后插入文件${srcdir}/build-make3> 将Makefile.tem拷贝给Makefile否则是交叉编译:1> 在Makefile.tem前加: "CROSS=-DCROSS_COMPILE"2> 在Makefile.tem中"#### cross ..."行后插入文件${srcdir}/cross-make3> 将Makefile.tem拷贝给Makefile15. 输出信息:"Created `${srcdir}/Makefile'. "16. 若语言子目录有configure文件,则执行之3.9生成config.status文件config.status内容如下:"#! /bin/sh输入的configure的命令行echo host=${canon_host} target=${canon_target} build=${canon_build}"作用是: 以后相同的安装过程,可以使用该文件,而不必重新输入命令3.10配值成功信息的输出若不是交叉编译,则输出信息:"Links are now set up for target ${canon_target} ."否则输出信息:"Links are now set up for host ${canon_host} and target ${canon_target}."3.11成功退出configure。