Linux编译安装
在使用Linux系统的过程中,软件包的安装是避免不了的。在Linux下,软件安装程序的种类很多,安装方法也各式各样,Linux的不同发行版本中都有自己的包安装工具,例如apt-get、yum、brew等等,但是这些包管理工具对于一个开发人员来说是远远不能满足需求的,所以为了能从根本上hold住还是得学习从源代码包中编译安装。
原始的c和c++代码都会进行打包,常见的是tar.gz、tar.bz2(tar.gz的用 tar zxvf 解压,tar.bz2的用 tar jxvf 解压),需要编译之后才能安装,在编译过程中你可以指定各种参数以适应你的系统需求,比如安装位置,优化参数,要哪些功能不要哪些功能等等。
Linux编译安装三步曲
从源代码安装过软件的朋友一定对 ./configure && make && make install 安装三步曲非常熟悉了。用一句话来解释这个过程就是:
根据源码包中 Makefile.in 文件的指示,configure 脚本检查当前的系统环境和配置选项,在当前目录中生成 Makefile 文件(还有其它本文无需关心的文件),然后 make 程序就按照当前目录中的 Makefile 文件的指示将源代码编译为二进制文件,最后将这些二进制文件移动(即安装)到指定的地方(仍然按照 Makefile 文件的指示)。
configure
这一步一般用来生成 Makefile,为下一步的编译做准备,基本上所有可以对安装过程进行的个性化调整都集中在这一步。你可以通过在 configure 后加上参数来对安装进行控制。
make
这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。在 make 过程中可能会出现 error ,系统少了一些依赖库等,这些需要自己仔细研究错误代码。
make install
这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。
通用configure选项
configure脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的。带上–help选项执行configure脚本可以看到可用的所有选项.尽管许多选项是很少用到的,但是当你为了特殊的需求而configure一个包时,知道他们的 存在是很有益处的。下面介绍一些通用的选项。
脚本自身选项
--help //显示帮助信息
--version //显示版本信息
--cache-file=FILE //在FILE文件中缓存测试结果(默认禁用)
--no-create //configure脚本运行结束后不输出结果文件,常用于正式编译前的测试。
--quiet, --silent //不显示脚本工作期间输出的"checking ..."消息。
目录选项
--srcdir=DIR //源代码文件所在目录,默认为configure脚本所在目录或其父目录。
--prefix=PREFIX //体系无关文件的顶级安装目录PREFIX ,默认值一般是 /usr/local 或 /usr/local/pkgName
--exec-prefix=EPREFIX //体系相关文件的顶级安装目录EPREFIX ,默认值一般是 PREFIX
--bindir=DIR //用户可执行文件的存放目录DIR ,默认值一般是 EPREFIX/bin
--sbindir=DIR //系统管理员可执行目录DIR ,默认值一般是 EPREFIX/sbin
--libexecdir=DIR //程序可执行目录DIR ,默认值一般是 EPREFIX/libexec
--datadir=DIR //通用数据文件的安装目录DIR ,默认值一般是 PREFIX/share
--sysconfdir=DIR //只读的单一机器数据目录DIR ,默认值一般是 PREFIX/etc
--sharedstatedir=DIR //可写的体系无关数据目录DIR ,默认值一般是 PREFIX/com
--localstatedir=DIR //可写的单一机器数据目录DIR ,默认值一般是 PREFIX/var
--libdir=DIR //库文件的安装目录DIR ,默认值一般是 EPREFIX/lib
--includedir=DIR //C头文件目录DIR ,默认值一般是 PREFIX/include
--oldincludedir=DIR //非gcc的C头文件目录DIR ,默认值一般是 /usr/include
--infodir=DIR //Info文档的安装目录DIR ,默认值一般是 PREFIX/info
--mandir=DIR //Man文档的安装目录DIR ,默认值一般是 PREFIX/man
特性选项
--enable-FEATURE //启用FEATURE特性
--disable-FEATURE //禁用FEATURE特性
--with-PACKAGE=DIR //启用附加软件包PACKAGE,亦可同时指定PACKAGE所在目录DIR
--without-PACKAGE //禁用附加软件包PACKAGE