最近在看《Linux程序设计》这本书,里面讲到makefile相关的知识,所以想写篇博客记录一下自己的学习情况。由于这本书里有关makefile的内容比较少,只是一些初级的知识,而且不够系统性,所以看到这篇博客的朋友如果想系统性地了解makefile的知识可以去查阅一些写得更好的博客,或者去查看make命令的手册。好了,下面开始介绍makefile。
经常在Windows下写程序的朋友可能用的比较多的是IDE,它不需要你去设置太多的东西就可以编译、链接自己写的代码,虽然在Linux下也有IDE可以使用,但有时候需要自己手动编译和链接文件,比如在bash里手动输入命令去编译.c文件,链接.o文件。在编写小程序时,许多人都会在编辑完源文件后重新编译所有文件来重建应用程序。但对大型程序来说,使用这种简单的处理方式会带来一些明显的问题:编辑——编译——测试 这一循环周期变长,改动一小部分代码导致所有源文件重新编译是不可接受的。
比如说,你有3个头文件:a.h、b.h、c.h,3个C源文件main.c、2.c、3.c,具体情况如下:1
2
3
4
5
6
7
8
9
10
11/* main.c */
...
/* 2.c */
...
/* 3.c */
...
如果你修改了a.h文件,make工具检测到main.c、2.c包含了这个文件,在重新编译的时候就只会对main.c、2.c进行重新编译,而不会重新编译3.c这个文件,当项目中源文件多的时候可以减少很多重新编译的时间。当你写好makefile文件的时候,每次编译文件只需要输入make命令即可,省去了一条一条输入命令的时间,而且在需要修改命令的时候只需要对makefile文件的相应部分做出修改。