1、用于生产目标文件的自动化执行过程;基本过程是确定各源文件于目标文件间的依赖关系:
目标文件:依赖的源文件列表
执行的命令
基本例子:
game: main.o a.o b.o
cc -o game main.o a.o b.o
main.o: main.h x.h z.h
cc -c main.c
a.o: a.h x.h y.h
cc -c a.c
b.o: b.h x.h y.h
cc -c b.c
执行命令行一定要用Tab进行缩进开头
2、优化make file
1)使用变量对源文件进行优化:(方便在一处即可维护源文件的变更)
如定义:objs = main.o a.o b.o 上例可优化为:
game: $(objs)
cc -o game $(objs)
main.o: main.h x.h z.h
cc -c main.c
a.o: a.h x.h y.h
cc -c a.c
b.o: b.h x.h y.h
cc -c b.c
2)make的自动推导功能可以简化makefile的编写:
只要make看到一个[.o]文件,它就会自动推导把[.h]文件加在依赖关系中,也会自动推导执行命令cc -c [.c]
3)深入优化格式可为:
game: $(objs)
cc -o game $(objs)
$(objs): x.h
main.o: z.h
a.o b.o: x.h y.h
4)通配符?~*
3、好习惯:
.PHONY: clean #“.PHONY”表示,clean是个伪目标文件
clean:
rm game $(objs)
4、.PHONY用于跳过隐含规则搜索改善makefile的执行性能;也用于解决不产生实际目标文件虚lable的问题:如clean,并不是一个实际要生产的目标文件,在该目录下如果存在一个clean的文件,没有.phony指定则该目标就永远不执行的问题。