linux源码安装
在linux操作系统中使用基于c的源码安装软件的同学都是知道要执行configure、make、make test、make install。但是这些到底啥,做了什么事情呢,虽然不是做c开发的,但是还是要简单了解下,不能傻呵呵跟机器人一样执行命令,然后都不知道是啥意思。
makefile文件
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。在linux环境下,程序猿经常需要使用GNU make来构建和管理自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。二这一切都基于makefile文件。makefile文件中描述了整个工程的编译、连接规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生出我们想要的可执行文件。编写makefile文件确实不是意见容易的事情,但是一旦给工程提供一个完整的makefile文件,那么编译整个工程只需要一步就能完成:在shell命令行输入make命令。从而极大地提高了效率降低了操作者的难度。也就是说make是一个命令工具,他用来及时makefile文件中的指令(准确讲应该是规则)。在makefile文件中描述整个工程中所有文件的编译顺序、编译规则。
autoconf 和 automake
前面说了makefile的重要性,无论是linux和unix环境中make都是一个重要的编译命令。但是前面也说过了,如果通过查阅make的帮助文档来手动编写makefile文件,对任何程序猿来说都是一种挑战。就是因为有了矛盾冲突,才有了技术的变革。GNU提供了Autoconf和Automake这两套工具使得编写makefile不再是一个难题。
./configure,make,make test,make install
这几个命令都是autoconf和automake提供的
1、configure,这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。
2、make,这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。
3、make insatll,这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。