1.主要功能:
描述源程序之间的相互关系并自动维护编译工作.makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。
2.例程:
一个名为prog的程序由三个C源文件filea.c、fileb.c和filec
Makefile文件工程样例
Makefile文件工程样例
.c以及库文件LS编译生成,这三个文件还分别包含自己的头文件a.h 、b.h和c.h。通常情况下,C编译器将会输出三个目标文件filea.o、fileb.o和filec.o。假设filea.c和fileb.c都要声明用到一个名为defs的文件,但filec.c不用。
0 #It is a example for describing makefile 注释行
1 prog : filea.o fileb.o filec.o #指定prog由三个目标文件filea.o、fileb.o和filec.o链接生成
2 cc filea.o fileb.o filec.o -LS -o prog #如何从prog所依赖的文件建立可执行文件
3 filea.o : filea.c a.h defs #指定filea.o目标文件,以及它们所依赖的.c和.h文件以及defs文件
4 cc -c filea.c #如何从目标所依赖的文件建立目标,即如何从filea.c建立filea.o
5 fileb.o : fileb.c b.h defs #指定fileb.o目标文件,以及它们所依赖的.c和.h文件以及defs文件
6 cc -c fileb.c #如何从目标所依赖的文件建立目标,即如何从fileb.c建立fileb.o
7 filec.o : filec.c c.h #指定filec.o目标文件,以及它们所依赖的.c和.h文件
8 cc -c filec.c #如何从目标所依赖的文件建立目标,即如何从filec.c建立filec.o代码片
CC 是一个全局变量,它指定你的Makefile所用的编译器,一般默认是gcc.
.o文件是unix下的中间代码目标文件,就如同在windows下的.obj文件一样,在unix下生成.o文件的过程叫编译(compile),将无数.o文件集合生成可执行文件的过程叫链接(link)
.a文件作用是:由于源文件太多(上例是指.c和.h文件过多),编译生成的中间目标文件(.o文件)太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,这个包就是.a文件。(相当于windows下的库文件Library file)
当filea.c或a.h文件在编译之后又被修改,则 make 工具可自动重新编译filea.o,如果在前后两次编译之间,filea.c 和a.h 均没有被修改,而且filea.o还存在的话,就没有必要重新编译。这种依赖关系在多源文件的程序编译中尤其重要。可避免许多不必要的编译工作.