Linux configure 参数解释

本文详细介绍了 Linux 环境下软件安装过程中 Configure 脚本的常见参数及其用途,包括 --prefix、--exec-prefix 等选项,为用户提供了一个全面的配置指南。
Linux configure 参数解释

Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不 离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Configure脚本配置工具就是基础之一,它是autoconf的工具的基本应用。
  
  与一些技巧相比,Configure显得基础一些,当然使用和学习起来就显得枯燥乏味一些,当然要成为高手,对基础的熟悉不能超越哦。
  
  为此我转载了一篇关于Configure选项配置的详细介绍。供大家参考

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

--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/configure
creating cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc ) works... yes
checking whether the C compiler (gcc ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for a BSD compatible install... /usr/bin/install -c
checking host system type... i586-pc-linux-gnu
checking build system type... i586-pc-linux-gnu
checking for ar... ar
checking for ranlib... ranlib
checking how to run the C preprocessor... gcc -E
checking for unistd.h... yes
checking for getpagesize... yes
checking for working mmap... yes
checking for limits.h... yes
checking for stddef.h... yes
updating cache ../config.cache
creating ./config.status
这样这棵构筑树就被配置了,下面可以继续构筑和安装这个包到默认的位置'/usr/local':
$ make all && make install
<think>我们正在讨论Linux环境下编译软件时使用的configure脚本的常用参数。根据引用内容,configure脚本用于配置软件包,检查系统环境和依赖,并生成Makefile。用户希望了解常用的配置参数。 常见参数分类: 1. 安装路径设置:指定软件安装的目录前缀,以及各个子目录(如bin, lib, man等)的位置。 2. 特性开关:启用或禁用某些特性。 3. 依赖库设置:指定依赖库的路径。 4. 交叉编译相关:指定主机、目标平台等。 5. 其他选项:如设置编译器、链接器参数等。 下面列出一些常用参数: 1. 安装路径: --prefix=PREFIX: 设置安装路径前缀,例如--prefix=/usr/local(默认通常是/usr/local) --exec-prefix=EPREFIX: 设置二进制文件的安装位置前缀(通常与prefix相同) --bindir=DIR: 用户可执行程序目录,默认是EPREFIX/bin --sbindir=DIR: 系统管理员可执行程序目录,默认是EPREFIX/sbin --libdir=DIR: 库文件目录,默认是EPREFIX/lib --includedir=DIR: C头文件目录,默认是PREFIX/include --datarootdir=DIR: 只读架构无关数据根目录,默认是PREFIX/share --mandir=DIR: man文档目录,默认是DATAROOTDIR/man --sysconfdir=DIR: 只读单机数据目录(配置文件),默认是PREFIX/etc 2. 特性开关: --enable-FEATURE: 启用某个特性(例如:--enable-shared) --disable-FEATURE: 禁用某个特性(例如:--disable-static) 3. 依赖库设置: --with-PACKAGE[=ARG]: 使用指定的包(依赖库或程序),可以指定路径(例如:--with-openssl=/path/to/openssl) --without-PACKAGE: 不使用指定的包 4. 编译器选项: CC: 指定C编译器(例如:CC=gcc) CFLAGS: 设置C编译器标志(例如:CFLAGS='-O2 -pipe') CXX: 指定C++编译器 CXXFLAGS: 设置C++编译器标志 CPPFLAGS: 设置C/C++预处理标志(如包含路径:CPPFLAGS=-I/path/to/include) LDFLAGS: 设置链接器标志(如库路径:LDFLAGS=-L/path/to/lib) 注意:这些编译器选项通常作为环境变量传递,而不是直接作为configure参数。但有时也可以作为参数传递,如:./configure CC=gcc CFLAGS="-O2 -g" 5. 交叉编译选项: --host=HOST: 指定程序运行的主机(目标平台),例如:--host=arm-linux-gnueabihf --build=BUILD: 指定编译程序的平台(通常自动检测) --target=TARGET: 指定目标平台(主要用于编译工具链) 6. 其他: --help: 显示所有可用参数 --version: 显示版本信息 --quiet, --silent: 减少输出信息 示例: ./configure --prefix=/usr --sysconfdir=/etc --enable-shared --disable-static --with-ssl 注意:每个软件包的configure脚本可能提供不同的选项,具体请使用`./configure --help`查看该软件包支持的参数。 引用中提到的内容: [^1] 提到configure用于配置软件包,检查环境和依赖。 [^2] 提到configure脚本可以编辑,但通常不需要从头编写。 [^3] 提到configure是autoconf工具的基本应用。 [^4] 提到安装路径的配置,特别是--prefix参数。 因此,用户在使用时,首先应查看软件包自带的帮助(./configure --help)以获取具体参数。 相关问题: 1. 如何查看特定软件包的configure脚本支持哪些参数? 2. 在交叉编译时,如何配置configure脚本? 3. 如何设置环境变量(如CFLAGS)来影响configure脚本的编译配置? 4. configure脚本执行失败时,如何进行调试?</think>### Linux 编译 configure 脚本常用参数详解 在 Linux 环境下编译软件时,`configure` 脚本是配置编译选项的核心工具。通过参数可控制安装路径、启用/禁用功能、设置依赖库路径等。以下是常用参数分类说明: #### 1. **安装路径配置** [^4] - `--prefix=PATH`:指定软件安装的**根目录**(默认 `/usr/local`) 示例:`--prefix=/opt/myapp` 将文件安装到 `/opt/myapp/bin`, `/opt/myapp/lib` 等子目录 - 子目录精细控制: - `--bindir=DIR`:可执行文件目录(默认 `PREFIX/bin`) - `--libdir=DIR`:库文件目录(默认 `PREFIX/lib`) - `--sysconfdir=DIR`:配置文件目录(默认 `PREFIX/etc`) - `--mandir=DIR`:帮助文档目录(默认 `PREFIX/share/man`) #### 2. **功能模块开关** - 启用特性:`--enable-FEATURE` 示例:`--enable-threads` 启用多线程支持 - 禁用特性:`--disable-FEATURE` 示例:`--disable-gui` 禁用图形界面 - 依赖包控制: - `--with-PACKAGE[=ARG]`:启用依赖包(可指定路径) 示例:`--with-openssl=/usr/local/openssl` - `--without-PACKAGE`:禁用依赖包 示例:`--without-python` #### 3. **编译环境设置** - 编译器选项(需作为环境变量传递): ```bash export CC=gcc # 指定C编译器 export CFLAGS="-O2 -pipe" # 优化参数 export LDFLAGS="-L/path/to/libs" # 库搜索路径 ./configure --prefix=... ``` - 跨平台编译: - `--host=HOST`:指定目标平台(交叉编译) 示例:`--host=arm-linux-gnueabihf` #### 4. **系统检查与调试** - `--help`:查看所有可用参数(**最重要**) - `--version`:显示 configure 脚本版本 - `--quiet` / `--silent`:减少输出信息 - `--cache-file=FILE`:缓存系统检测结果加速配置 #### 使用示例 ```bash # 典型场景:自定义路径+启用特性+指定依赖 ./configure \ --prefix=/opt/myapp \ --sysconfdir=/etc/myapp \ --enable-ssl \ --with-zlib=/usr/local/zlib \ --without-sqlite ``` > **注意**:不同软件的 configure 参数可能不同,**务必通过 `./configure --help` 查看当前软件支持的完整选项列表** [^1][^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值