Makefile 简单的说就是目标依赖,递归生成
■ Makefile的语法规则:
目标: 依赖
<Tab>命令列表
1. 判断目标(文件)是否存在,存在时比较目标文件与依赖文件的修改时间关系 if Target修改时间 < Dependence[i]修改时间,则重新执行目标;
2. 在重新执行命令前,检测依赖文件是否也有依赖关系,按与上1同样的方式处理;
■ 调用:
一、Makefile的规则$ make 【目标】 #如果没有指定目标,则执行第一个目标
target ... : prerequisites ...
command
...
二、一个示例
如果一个工程有3个头文件,和3个C文件,我们的Makefile是下面的这个样子的。
edit : main.o Car.o \
Engine.o
cc -o edit main.o Car.o Engine.o
main.o : main.c defs.h
cc -c main.c
Car.o : Car.c
cc -c Car.c
Engine.o : Engine.c defs.h
cc -c Engine.c
clean :
rm edit Car.o Engine.o
三、make是如何工作的:
在默认的方式下,也就是我们只输入make命令。那么,
1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。
3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。
4、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这是递归过程)
5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。