一、makefile的规则
让我们先来简单的看下makefile的制行规则
target ... : prerequisites ...
command
...
...
其中有target、prerequisites、command这样几个关键词,下面分别介绍下这几个关键词是有什么意思
target:
target也就是一个目标文件,可以是一个对象文件(objectFile),也可以是一个标签(lable)
那么对于标签的这种特性,是有什么意思呢,后面我们会一一介绍
prerequisites:
prerequisites的意思是生成该target所依赖的文件和/或target。
command:
target需要真正执行的命令
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。
例子
假设现在我们有一个C语言工程,其中包括三个头文件(.h)和8个C文件,为了完成前面所述的那三个规则,我们如何来编写makefile文件呢?
edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \ #这里的'\'就是换一行的意思
insert.o search.o files.o utils.o
在这个例程后面我们特意加了一个说明,就是在'\'的后面,增加了一个注释,在makefile中增加了反斜杠,这里的反斜杠就是换行的意思。
在这个makefile文件中,target包含:可执行文件edit和中间的目标文件*.o
依赖文件是什么呢?prerequisites包含冒号后面的,.c文件和.h文件,每一个.o后面都有一组依赖文件
下面cc -* *这个就是执行文件
当这个makefile文件写完之后,我们直接制行make命令就可以完成整个程序的编译了,非常方便