./configure
make
make install

源码安装三部曲,一直在使用却一直知其然不知其所以然,今天就说说所以然。
源码到成为可运行程序经历了一下步骤

源码–>预处理–>编译–>汇编–>链接–>执行

make就做了编译汇编的工作,当然也也不是随随便便就干活的,要有依据,那他是根据什么干活的呢?根据一个叫makefile的文件。那么makefile哪来的呢?configure生成的。现在指定为什么make之前要执行./configure了吧。
configure也是个懂规矩的孩子,他也不会乱生成的,他会根据一个叫做Makefile.in的模板文件生成makefile。
问题又来了,makefile.in哪来的呢?当然是由一个叫automake的工具生成的。configure哪来的啊。他是由一个叫autoconf的工具生成的。

make install干了写什么呢,其实他就干了一个工作,把编译好的文件复制到指定的目录。说到底就是调用了install命令。可以自己去搜一下install命令,这个是个拷贝命令。

下面我们来总结一下整个编译安装的过程经历了什么。
在发布源码包前开发人员用automake生成makefile.in,用autoconf生成configure脚步
然后我们拿到的源码包,里面有源码、makefile.in文件、configure脚步。
我们执行./configure根据自己的配置和makefile文件中的配置进行结合,处理依赖包的关系,生成makefile文件
执行make命令根据makefile的信息,调用编译工具,可能是gcc也可能是其他编译器,对源码进行编译
执行make install将编译后生成的文件复制到指定位置。
整个编译完成。
这样就可以用了吗?可以。

但是貌似启动起来好麻烦,得切换到安装的目录的bin目录下,要是能直接在命令行的任何路径下都能管理启动或是关闭就好了,你还要对一些执行文件做软连接,添加环境变量,设置启动服务等,要不然你每次都要到程序的安装目录去执行这是多么痛苦的事啊。 (以apache为例):

  1. 导出二进制程序目录至PATH环境变量中;
    编辑文件/etc/profile.d/httpd2.2.sh文件,在文件中写入下边一行即可;(注意,httpd2.2.sh文件并不存在,创建即可)
    export PATH=/root/test/httpd2.2/bin
    保存退出,要让此设置即刻生效,需要在当前目录下执行命令
    source httpd2.2.sh
    现在我们就可以在系统的任何路径下打开或关闭httpd服务了,而不用记住那一长串的路径了
  2. 导出库文件路径;
    编辑/etc/ld.so.conf.d/httpd2.2.conf; 注意:httpd2.2文件不存在,需自行创建
    添加新的库文件所在目录至此文件中;
    /root/test/httpd2.2/lib
    让系统重新生成缓存:
    ldconfig [-v]
    -v查看详细内容
  3. 导出头文件(可以将目录建立一个符号链接,或者所有头文件每一个文件都建一个)
    基于链接的方式实现:
    ln -sv /root/test/httpd2.2/include /usr/include/httpd2.2
  4. 导出帮助手册
    编辑/etc/man_db.conf文件,加入一个MANPATH; 注意:centos6.x系列中为/etc/man.config文件
    执行 man apachectl 试试看
    至此,编译安装的工作完成,赶紧动手试试哇!

configure脚步配置选项说明
安装路径设定
–prefix=path/to/dir 指定默认安装路径
–sysconfdir=path/to/dir 配置文件安装位置
System types:
Optional Features:可选特性
–disable-feature 禁用某特性
–enable-feature[=age] 启用某特性
Optional PACKAGES:可选包
–with-package[=package] 依赖的包
–without-package 不需要的包

Logo

更多推荐