linux 源码编译安装软件包./configure 详解

部分转自:http://blog.sina.cn/dpool/blog/s/blog_4fcd1ea30100un12.html?vt=4http://blog.sina.cn/dpool/blog/s/blog_4fcd1ea30100un12.html?vt=4

在linux上使用程序源码编译安装软件包的时候第一步是./configure命令,对这个命令的作用很好奇,搜集了一下:

Linux环境下,如果通过源代码编译安装程序的简单过程可以 描述为:./configure–>make–>make install。其中./configure配置脚本功能就是对你的系统做很多的测试,以用来检测出你的安装平台的目标特征,比如它会检测你是不是有CC 或GCC,它是个shell脚本,是autoconf的工具的基本应用,它会产生一个输出文件’./Makefiles’,接下来make程序通过该文件 来实现编译。

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

configure脚本选项的配置内容基本上分成9块内容,分别是:

1. 配置区【Configuration】
2. 程序安装目录区【Installation directories】
3. 程序名称区【Program names】
4. 系统类型区【System types】
5. 可选特性区【Optional Features】
6. 可选安装包区【Optional Packages】
7. 影响安装的环境变量区【Some influential environment variables】
8. 其他信息

1. configuration

这块内容主要是对./configure脚本本身运行的过程进行配置,如是否显示运行结果给用户,是否创建cache文件啊。由于这些选项都比较简单,就不翻译了。

-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']

–cache-file=FILE
  ‘configure’会在你的系统上测试存在的特性(或者bug!),为了加速随后进行的配置,测试的结果会存储在一个cache file里,尤其当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的版本号.

2. Installation directories

这个区块是./configure脚本中经常被配置的选项区,这里的主要作用就是配置你要安装的软件的安装后的目录,默认情况下(用户没有主动配置),./configure会将软件安装在/usr/local/bin/和/usr/local/lib/等目录下面。

--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/mysql]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]

–prefix=PREFIX(文件安装的位置,默认为:/usr/local)
  ‘–prefix’是最常用的选项.制作出的’Makefile’会查看随此选项传递的参数,当一个包在安装时可以彻底的重新安置他的结构独立部分. 举一个例子,当安装一个包,例如说Emacs,下面的命令将会使Emacs Lisp file被安装到”/opt/gnu/share”:
$ ./configure –prefix=/opt/gnu/share

–exec-prefix=EPREFIX
  与’–prefix’选项类似,但是他是用来设置结构倚赖的文件的安装位置.编译好的’emacs’二进制文件就是这样一个问件.如果没有设置这个选项的话,默认使用的选项值将被设为和’–prefix’选项值一样.

–bindir=DIR
  指定二进制文件的安装位置.这里的二进制文件定义为可以被用户直接执行的程序, 默认为EPREFIX/bin.

–sbindir=DIR
  指定超级二进制文件的安装位置.这是一些通常只能由超级用户执行的程序.默认为EPREFIX/sbin

–libexecdir=DIR(包目录,程序调用)
  指定可执行支持文件的安装位置.与二进制文件相反,这些文件从来不直接由用户执行,但是可以被上面提到的二进制文件所执行.默认为EPREFIX/libexec.

–datadir=DIR
  指定通用数据文件的安装位置.默认为PREFIX/share

–sysconfdir=DIR(/etc配置文件目录, 默认为PREFIX/etc)
  指定在单个机器上使用的只读数据的安装位置.

–sharedstatedir=DIR
  指定可以在多个机器上共享的可写数据的安装位置. 默认为 PREFIX/com

–localstatedir=DIR
  指定只能单机使用的可写数据的安装位置. 默认为PREFIX/var

–libdir=DIR(库文件目录)
  指定库文件的安装位置. 默认为PREFIX/lib

–includedir=DIR
  指定C头文件的安装位置.其他语言如C++的头文件也可以使用此选项. 默认为PREFIX/include

–oldincludedir=DIR
  指定为除GCC外编译器安装的C头文件的安装位置. 默认为/usr/include

–infodir=DIR
  指定Info格式文档的安装位置.Info是被GNU工程所使用的文档格式. 默认为PREFIX/info

–mandir=DIR(帮助文档的安装目录)
  指定手册页的安装位置.默认为PREFIX/man

–srcdir=DIR
  这个选项对安装没有作用.他会告诉’configure’源码的位置.一般来说不用指定此选项,因为’configure’脚本一般和源码文件在同一个目录下.

3. Program names

如果你想改变安装后程序的名称,如你安装qq程序,但是你不想称呼它为“qq“,而想叫它为“360”,那么可以通过下面这些选项来配置了。

–program-prefix=PREFIX
  指定将被加到所安装程序的名字上的前缀.例如,使用’–program-prefix=g’来configure一个名为’tar’的程序将会使安装的程序被命名为’gtar’.当和其他的安装选项一起使用时,这个选项只有当他被`Makefile.in’文件使用时才会工作.

–program-suffix=SUFFIX
  指定将被加到所安装程序的名字上的后缀.

–program-transform-name=PROGRAM
  这里的PROGRAM是一个sed脚本.当一个程序被安装时,他的名字将经过`sed -e PROGRAM’来产生安装的名字.

4. System types

一个程序开发完成以后,对源代码进行编译,将编译后的文件发布出去形成所谓的各个平台的安装版本(非开源的都是这么干的,开源的也可以这样编译后产生不同运行平台的编译版本),这就是所谓的交叉编译。下面介绍有关这平台相关性的选项。
–build=BUILD
  指定软件包安装的系统平台.如果没有指定,默认值将是’–host’选项的值.

–host=HOST
  指定软件运行的系统平台.如果没有指定,将会运行`config.guess’来检测.

–target=GARGET
–target选项用来配置编译工具,它只有在建立交叉编译 环境的时候用到,正常编译和交叉编译都不会用到。他用–build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上。

  指定软件面向(target to)的系统平台.这主要在程序语言工具如编译器和汇编器上下文中起作用.如果没有指定,默认将使用’–host’选项的值.通过–build选项来指定执行代码编译工作的主机,通常该值默认是cofig.guess(该shell脚本和./configure在同一目录)来猜即可(一般就是你执行编译操作的主机),当然你也可以通过这个选项指定具体的值。
编译的程序在什么机器上运行是由–host选项指定的,其默认值都是–build,当两者不一样的时候就是所谓的交叉编译。

5. Optional Features

当你想在./configure时使用某个特性的时候,可以来配置该区块中的选项值,它主要分为disable和enable两大类,具体有哪些特性可以用过“./configure –help“来查询。下面主要来总的介绍下这2类配置。

–disable-FEATURE
当你想禁用某个FEATURE的时候可以使用它(尤其是某些软件可能默认开启某些特性,而实际上你是不需要的),
例如:$ ./configure –disable-gui

-enable-FEATURE[=ARGUMENT]
相反的,一些软件包可能提供了一些默认被禁止的特性,这时你可以使用“–enable-FEATURE“来起用它,一个特性可能会接受一个可选的参数值。
例如:$ ./configure –enable-buffers=128.
–enable-FEATURE=no’与上面提到的’–disable-FEATURE’是同义的

6. Optional Packages

软件的包安装的时候,可能会存在依赖。加上a软件依赖于b软 件,那么在安装a软件的时候,必须要先安装b软件,而此时b软件偏偏不在系统的默认查询目录(即系统无法查询到,或者你不想使用系统默认的b软件而想使用 你自己安装的b软件(整个系统有2个b软件)),你就可用通过with选项来指定具体的软件包地址,通过without选项来指定不使用指定的软件包。

--with-PACKAGE[=ARGUMENT]
--without-PACKAGE
'--with-PACKAGE=no'与下面将提到的'--without-PACKAGE'是同义的.

例如:

$ ./configure --with-tcl=/usr/local --with-tk=/usr/local
$ ./configure --without-gnu-ld
--with-PACKAGE[=ARG]

关于这些这个选项区块,有些软件会有类似下面2个比较特殊的选项。
–x-includes=DIR
这个选项是’–with-PACKAGE’选项的一个特例,它提供了向’configure’脚本指明包含X11头文件的目录的方法。
–x-libraries=DIR
类似的,’–x-libraries’选项提供了向’configure’脚本指明包含X11库的目录的方法。
关于第5/6两块,和具体程序的相关性就比较高了,很多程序的不同配置都可以在这里面指定。

7. Some influential environment variables

这块主要是影响编译器的编译环境变量

8. 源码安装包的卸载

最后一个问题,一个软件包通过编译源代码安装后,如何完全的卸载呢?
如果原先的source还在的话,很多source的 Makefile都有写uninstall规则,直接在Souce里make uninstallmake install & make clean)就可行,不过如果碰到无良作者没写的,那一句一句看Makefile里install部分他都干了些什么,然后挨个删除。如果source没 了,那就悲剧了。
8.1如何卸载用源码包安装的软件?

最好是看README和INSTALL ;一般的情况下都有说,但大多软件没有提供源码包的卸载方法;
我们可以找到软件的安装点删除。主要看你把它安装在哪了。(先删除进程再删除执行文件等)

比如:

如果安装软件时,指定个目录。这个问题也不会难;

比如用源码包安装gaim 的

#./configure --prefix=/opt/gaim
#make
#make install

如果安装mlterm

#./configure --prefix=/opt/mlterm

#make

#make install

把源码包安装的软件,都指定安装在 /opt目录中,这样不就知道了??

如果删除,就删除相应的软件目录;

有些软件要在解压安装目录中执行 make uninstall ,这样就卸载掉了


9.linux下软件的基本安装和卸载

Linux软件的安装和卸载一直是困扰许多新用户的难题。在Windows中,我们可以使用软件自带的安装卸载程序或在控制面板中的“添加/删除程序”来实现。与其相类似,在Linux下有一个功能强大的软件安装卸载工具,名为RPM。它可以用来建立、安装、查询、更新、卸载软件。该工具是在命令行下使用的。在Shell的提示符后输入rpm,就可获得该命令的帮助信息。

(1)软件的安装

Linux下软件的安装主要有两种不同的形式。

第一种安装文件名为xxx.tar.gz#源码包
另一种安装文件名为xxx.i386.rpm#rpm二进制包

rpm包就是已经编译过的文件打包了。源码包就是用c语言写的代码,我们可以看到代码,可以自己更改。

以第一种方式发行的软件多为以源码形式发送的;第二种方式则是直接以二进制形式发送的。

对于第一种,安装方法如下:

1 .首先,将安装文件拷贝至你的目录中。例如,如果你是以root身份登录上的,就将软件拷贝至/root中。

#cp xxx.tar.gz /root

2 .由于该文件是被压缩并打包的,应对其解压缩。命令为:

#tar xvzf filename.tar.gz 如果是filename.tar.bz2格式的,应该是tar jxvf filename.tar.bz2来解压

3.执行该命令后,安装文件按路径,解压缩在当前目录下。用ls命令可以看到解压缩后的文件。通常在解压缩后产生的文件中,有“Install”的文件。该文件为纯文本文件,详细讲述了该软件包的安装方法

4.执行解压缩后产生的一个名为configure的可执行脚本程序。它是用于检查系统是否有编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。(是否有库文件并且库文件必须符合系统要求)为随后的编译工作做准备。
命令为: #./configure

如果您想把软件安装到指定目录,应该用#./configure --prefix=/您自己指定的目录,比如我想把一个mlterm安装到/opt/mlterm目录中,应该如下输入

#./configure --prefix=/opt/mlterm

5.检查通过后,将生成用于编译的MakeFile文件。此时,可以开始进行编译了。编译的过程视软件的规模和计算机性能的不同,所耗费的时间也不同。

命令为: `#make`

6.成功编译后,键入如下的命令开始安装:

#make install

7.安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。键入如下命令:

#make clean
#make distclean

至此,软件的安装结束。

总结:
./configure 配置软件属性,安装目录,检查编译所需的库文件是否存在(符合条件的)等,生成编译所需要的makefile 文件.

make生成 编译软件

make install 安装软件

make clean,make distclean 清除安装过程中生成的临时文件和配置文件

对于第二种,其安装方法要简单得多。

同第一种方式一样,将安装文件拷贝至你的目录中。然后使用rpm来安装该文件。命令如下:

#rpm -ivh filename.i386.rpm

rpm将自动将安装文件解包,并将软件安装到缺省的目录下。并将软件的安装信息注册到rpm的数据库中。

参数i的作用是使rpm进入安装模式。

(2)软件的卸载

1.软件的卸载主要是使用rpm来进行的。卸载软件首先要知道软件包在系统中注册的名称。键入命令:

#rpm -qa  #即可查询到当前系统中安装的所有的软件包。

2.确定了要卸载的软件的名称,就可以开始实际卸载该软件了。键入命令:

#rpm -e [package name]

即可卸载软件。参数e的作用是使rpm进入卸载模式。对名为[package name]的软件包进行卸载。由于系统中各个软件包之间相互有依赖关系。如果因存在依赖关系而不能卸载,rpm将给予提示并停止卸载。你可以使用如下的命令来忽略依赖关系,直接开始卸载:

#rpm -e [package name] -nodeps 忽略了软件包中的依赖关系

忽略依赖关系的卸载可能会导致系统中其它的一些软件无法使用

如果想知道rpm包安装到哪里了呢?

#rpm -ql [package name] 显示软件套件的文件列表
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值