在linux下面安装软件,我们经常使用的命令是:
./configure
make
make install
很多人不知道,为什么我们敲入这几个命令,我们的源码文件就开始编译成可执行程序了?而且在shell控制窗口还会有逼格地显示不断滚动的字符雨,显得特别高大上。
其实,这一切,都是makefile在背后“搞鬼”,makefile文件里,定义了我们编译源文件的规则,make命令就是根据makefile里面的规则,才将源程序文件编译成了可执行程序。
平时,在windows下面写一个程序,比如C程序,我们经常使用VC6.0、C-free等集成开发环境,简称IDE。我们新建一个C文件,编辑好我们的程序,然后点击运行按钮,程序瞬间就可以运行。
但是在linux下面,没有这么人性化的集成开发环境,如果你想写一个程序,从编辑程序、到编译、调试都要自己撸袖子自己完成,需要在shell黑漆漆的窗口下,使用命令行完成。比如我们在linux目录下,新建了一个hello.c
#include<stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
写好这个程序后,接着你就可以使用:
命令,就可以生成可执行程序hello了。
如果每次敲入命令你嫌麻烦,可以在hello.c的当前目录下,创建一个makefile文件,然后编辑makefile文件:
hello:hello.c
gcc -o hello hello.c
保存后,我们在当前目录下敲入make命令,也可以直接生成可执行程序hello了!看,makefile帮我们自动编译了程序,再也不用痛苦地敲gcc命令了!妈妈再也不用担心我晚回家吃饭了!
在这个文件中,我们定义了一个规则,用来告诉make工具如何将hello.c编译成hello可执行文件。当然,这个makefile文件是比较简单的。当我们的项目有成千上万的源文件时,我们通过makefile定义这些编译规则,然后在命令行下直接敲入make,就可以直接编译,是不是有种君临城下的感觉?
比如linux,现在已经1000多万行代码了,几万个文件,我们直接一个make,就可以看着shell窗口不断滚动的字符雨,最后编译成我们想要的linux内核镜像文件,是不是感觉很神奇?学习了makefile,你会发现,其实这并不难。通过学习,你也可以编写一个makefile,去编译一个项目工程的源代码文件!
学习makefile有哪些好处呢?
首先对于IT企业来说,尤其是从事linux、苹果MAC系统下面的开发,makefile是必须掌握的,就像我们在windows下面掌握VC6.0、Visual Studio一样,不然开发无从谈起。
对于项目经理、项目负责人、架构师来说,不会makefile,老板让你负责一个项目,你要搭建起来吧,要把软件框架搭好吧,不会makefile,想搭建起来够呛。
对于在校学生来说,通过makefile的学习,你会对软件构造系统,比如程序是如何编译和链接的、库的机制和原理、静态库、动态库是如何编译生成和使用的,会有一个很深刻的理解。这对你以后从事IT行业、嵌入式行业开发工作有很大的帮助:学习makefile就相当于你练了九阳神功,接着再去练乾坤大挪移,就不会感到很吃力了~
同时,作为在校学生,如果你会makefile,甚至是makefile的专家,会自己独立搭建一个项目,开展一个项目,当你面试时,当面试官看到你有这方面的黑科技能力,肯定会眼前一亮。
同时,学习了makefile了,对于我们分析开源软件,尤其是linux内核这样的复杂无比的超大型软件项目时,makefile就像一幅linux的内核地图,会引领我们去在linux几千万行的代码文件里遨游,而不会迷路。makefile就像一把瑞士军刀,一把插入linux的内核心脏!
《makefile工程实践》,一步一步从零开始,带你写一个项目的makefile,让你拥有独立搭建项目的能力。
视频教程CSDN学院正式发布,CSDN学院地址:http://edu.csdn.net/course/detail/3610