部分转载自:://blog.sina.cn/dpool/blog/s/blog_4fcd1ea30100un12.html?vt=4
在Linux上使用程序源码编译安装软件包的第一步是./configure命令。 我很好奇这个命令的作用,所以收藏了:
在Linux环境下,从源代码编译安装程序的简单过程可以描述为:./configure–>make–>makeinstall。 其中./configure配置脚本功能就是对你的系统做大量的测试,来衡量你的安装平台的目标特性。 例如,它会检查您是否有 CC 或 GCC。 它是一个 shell 脚本,是 autoconf。 该工具的基本应用会形成一个输出文件'./Makefiles',make程序将使用这个文件来实现编译。
“配置”脚本有大量命令行选项。 对于不同的软件包,这些选项可能会有所不同,但许多基本选项不会改变。 使用“--help”选项执行“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.配置
该内容主要配置./configure脚本本身的运行过程,比如是否向用户显示运行结果、是否创建缓存文件等。 由于这些选项比较简单,就不一一翻译了。
-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 `..']
--缓存文件=文件
“配置”将测试系统上的现有功能(或错误!)。 为了加快后续配置速度,测试结果存储在缓存文件中。 这在配置复杂的源树时特别有用。 cachefile的存在对于性能会有很大的帮助。
-帮助
输出帮助信息。 尽管有经验的用户经常需要使用“-help”选项,因为复杂的项目会包含其他选项。 例如,GCC 包中的“configure”脚本包含一个脚本,允许您控制是否生成以及选择在 GCC 中使用 GNU 汇编器。
--不创建
“configure”中的主要函数,用于创建输出文件。 此选项可防止“configure”生成此文件。 您可以将其视为一次试运行,尽管缓存始终会被重写。
-安静的
-沉默的
当“configure”运行测试时,它会打印简单的信息来告诉用户发生了什么。 这样做是因为“配置”可能很慢,如果没有此输出,用户将想知道发生了什么。 使用这两个选项中的任何一个都会让你被抛在一边。
-版本
复制用于形成“配置”脚本的 Autoconf 版本号。
2.安装目录
该块是一个选项区域,通常在./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 时怎么用源码编译脚本,下面的命令会导致 EmacsLispfile 安装到“/opt/gnu/share”:
$./configure--prefix=/opt/gnu/share
–exec-前缀=EPREFIX
与“--prefix”选项类似,用于设置结构所保存的文件的安装位置。 编译出来的‘emacs’二进制补码文件就是这样一个文件。 如果未设置该选项,则默认使用该选项值,该选项值将设置为与“--prefix”选项值相同。
–bindir=目录
指定二进制补码文件的安装位置。 这里的二进制补码文件定义为用户可以直接执行的程序。 默认为 EPREFIX/bin。
–sbindir=目录
指定超二进制补码文件的安装位置。 这些程序通常只能由超级用户执行。 默认为 EPREFIX/sbin
–libexecdir=DIR(包目录,程序调用)
指定可执行支持文件的安装位置。 与补码文件相比,此类文件永远不会由用户直接执行,而是可以由前面提到的补码文件来执行。 默认为 EPREFIX/libexec。
--datadir=目录
指定常用数据文件的安装位置。 默认为 PREFIX/share
–sysconfdir=DIR(/etc配置文件目录,默认为PREFIX/etc)
指定单台计算机上使用的只读数据的安装位置。
–sharedstatedir=目录
指定可在多台计算机之间共享的可写数据的安装位置。 默认为 PREFIX/com
–localstatedir=目录
指定只能由单机使用的可写数据的安装位置。 默认为 PREFIX/var
–libdir=DIR(库文件目录)
指定库文件的安装位置。 默认为 PREFIX/lib
–includedir=目录
指定C头文件的安装位置。 该选项也可以用于其他语言(例如C++)的头文件。 默认为 PREFIX/include
–oldincludedir=目录
指定 GCC 以外的编译器安装的 C 头文件的安装位置。 默认是/usr/include
–infodir=目录
指定Info格式文档的安装位置。 Info 是 GNU 项目使用的文档格式。 默认为 PREFIX/info
–mandir=DIR(帮助文档安装目录)
指定引导页的安装位置。 默认是 PREFIX/man
–srcdir=目录
该选项对安装没有影响。 它将告诉“配置”源代码的位置。 通常不需要指定此选项,因为“configure”脚本通常与源代码文件位于同一目录中。
3.程序名称
如果你想在安装后更改程序的名称,例如你安装了qq程序,并且不想叫它“qq”,而是想叫它“360”,你可以通过配置以下选项。
–程序前缀=前缀
指定将添加到已安装程序名称的前缀。 例如,使用“--program-prefix=g”配置名为“tar”的程序将导致安装的程序被命名为“gtar”。 当与其他安装选项一起使用时,此选项仅在“Makefile.in”文件中使用时才起作用。
–程序后缀=后缀
指定将添加到已安装程序名称的后缀。
–程序转换名称=程序
这里的程序是一个 sed 脚本。 当安装程序时,其名称将通过“sed-ePROGRAM”传递以形成安装名称。
4.系统类型
程序开发完成后,对源代码进行编译,将编译后的文件发布出来,生成各个平台的所谓安装版本(非开源的都是这样做的,开源的也可以在这种方式形成针对不同操作平台)版本)的编译,这就是所谓的交叉编译。 与该平台相关的选项如下所述。
–build=构建
指定安装包的系统平台。 如果未指定,默认值将是“--host”选项的值。
–主机=主机
指定软件运行的系统平台。 如果未指定,将运行“config.guess”进行测量。
–目标=GARGET
–target选项用于配置编译工具。 仅在构建交叉编译环境时使用。 普通编译和交叉编译中不使用它。 他在主机上使用--build编译器来编译一个新的编译器(binutils、gcc、gdb等)。 由这个新编译器编译的其他程序将在目标指定的系统上运行。
指定软件所针对的系统平台。 这主要适用于编译器和汇编器等编程语言工具的上下文。 如果未指定,则默认使用“-host”选项的值。 通过 -build 选项指定执行代码编译工作的主机。 一般情况下默认为cofig.guess(shell脚本和./configure在同一目录下)。 你可以猜测一下(通常是你执行编译操作的主机)。 事实上,你也可以通过这个选项指定具体的值。 价值。
编译后的程序运行的机器由–host选项指定,其默认值为–build。 当两者不同时,称为交叉编译。
5.可选功能
当你想使用./configure中的某个功能时,可以在该块中配置选项值。 主要分为两类:禁用和启用。 具体功能可以使用“./configure-help”进行查询。 下面主要对这两类配置进行总体介绍。
--禁用功能
当您想要禁用某个功能时(特别是某些软件可能默认启用某些功能,但您实际上并不需要它们),可以使用它。
例如:$./configure-disable-gui
-启用-功能[=参数]
相反,某些软件包可能提供一些默认情况下严格禁止的功能。 在这种情况下,您可以使用“-enable-FEATURE”来启用它。 功能可以接受可选参数值。
例如:$./configure-enable-buffers=128。
–enable-FEATURE=no”与前面提到的“–disable-FEATURE”同义
6.可选套餐
安装软件包时,可能存在依赖关系。 另外,软件a依赖于软件b,所以在安装软件a时,必须先安装软件,而软件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]
关于这些选项块,有些软件会有类似于下面两个的特殊选项。
–x-includes=DIR
此选项是“-with-PACKAGE”选项的特例,它提供了一个技巧来向“configure”脚本指示包含 X11 头文件的目录。
–x-libraries=DIR
类似地,“--x-libraries”选项提供了一个技巧来向“configure”脚本指示包含 X11 库的目录。
对于第五块和第六块来说,它们与具体程序的关系更为密切。 可以在此处指定许多程序的不同配置。
7.一些有影响的环境变量
该区域主要影响编译器的编译环境变量。
8.卸载源码安装包
最后一个问题是,一个软件包通过源码编译安装后,如何彻底卸载呢?
如果原来的源码还在,很多源码的Makefile都有卸载规则。 直接在Source中进行卸载(makeinstall&makeclean)是可行的。 但是,如果你遇到无良作者没有写过的东西,那么他就会逐句读取Makefile中的install部分。 做某事然后一一删除。 如果源头消失了,那将是一场悲剧。
8.1 如何卸载源码包安装的软件?
最好阅读README并安装; 通常都会提到它们,但大多数软件并没有提供卸载源代码包的方法;
我们可以找到该软件的安装点并将其删除。 主要取决于你安装在哪里。 (先删除进程再删除可执行文件等)
例如:
如果安装软件,请指定一个目录。 这个问题也不难;
例如使用源码包安装gaim
#./configure --prefix=/opt/gaim
#make
#make install
如果您安装了 mlterm
#./configure --prefix=/opt/mlterm
#make
#make install
难道你不知道所有从源码包安装的软件都指定安装在/opt目录下吗? ?
如果删除则删除对应的软件目录;
有些软件需要在解压后的安装目录下执行makeuninstall来卸载。
9.Linux下软件的基本安装与卸载
安装和卸载Linux软件仍然是困扰许多新用户的一个难题。 在Windows中,我们可以使用软件自带的安装和卸载程序或者控制面板中的“添加/删除程序”。 同样,Linux下有一个强大的软件安装和卸载工具,叫做RPM。 它可用于构建、安装、查询、更新和卸载软件。 该工具是从命令行使用的。 在 Shell 提示符下输入 rpm 可获取该命令的帮助信息。
(一)软件安装
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生成编译软件
makeinstall安装软件
makeclean、makedistclean 删除安装过程中生成的临时文件和配置文件
对于第二种,安装方法就简单多了。
与第一种方法一样,将安装文件复制到您的目录中。 然后使用rpm来安装该文件。 命令如下:
#rpm -ivh filename.i386.rpm
rpm 会手动解压安装文件并将软件安装到默认目录中。 并将软件安装信息注册到rpm数据库中。
参数i的作用是让rpm进入安装模式。
(2)软件的卸载
1、软件卸载主要使用rpm方式进行。 要卸载软件,首先必须知道系统中注册的软件包名称。 输入命令:
#rpm -qa #即可查询到当前系统中安装的所有的软件包。
2、确定要卸载的软件名称后,就可以开始实际卸载软件了。 输入命令:
#rpm -e [package name]
该软件可以卸载。 参数e的作用是让rpm进入卸载模式。 卸载名为[packagename]的软件包。 因为系统中各个软件包之间存在依赖关系。 如果由于依赖关系而无法卸载,rpm会给出提示并停止卸载。 您可以使用以下命令忽略依赖关系并直接开始卸载:
#rpm -e [package name] -nodeps 忽略了软件包中的依赖关系
在忽略依赖关系的情况下卸载可能会导致难以使用系统中的某些其他软件。
如果你想知道rpm包安装在哪里怎么办?
#rpm -ql [package name] 显示软件套件的文件列表