Makefile包括以下内容:
*需要由make工具创建的目标体(target),目标体通常是目标文件、可执行文件或是一个标签。
*要创建的目标体所依赖的文件(dependency_file)。
*创建每个目标体时需要运行的命令(command)。
格式:
target:dependency_file
command
command前面是“Tab”符,如果没有会出错。
例子:
exeprogram:main.o command.o display.o insert.o search.o files.o gcc -o exeprogram main.o command.o display.o insert.o search.o files.o main.o:main.c defs.h gcc -c main.c -o main.o command.o:command.c command.h gcc -c command.c -o command.o display.o:display.c dispaly.h gcc -c display.c -o display.o insert.o:insert.c insert.h gcc -c insert.c -o insert.o search.o:search.c search.h gcc -c search.c -o search.o files.o:files.c files.h gcc -c files.c -o files.o clean: rm exeprogram main.o command.o display.o insert.o search.o files.o
想要删除可执行文件以及所有的中间目标文件,执行“make clean”即可
Makefile变量(使用变量易维护)
变量定义的两种方式:
递归展开——>VAR=var
简单扩展——>VAR: =var
变量的使用格式为$(VAR).
上面的例子可以改写为:
OBJS=main.o command.o display.o insert.o search.o files.o exeprogram:$(OBJS) gcc -o exeprogram $(OBJS) main.o:main.c defs.h gcc -c main.c -o main.o command.o:command.c command.h gcc -c command.c -o command.o display.o:display.c dispaly.h gcc -c display.c -o display.o insert.o:insert.c insert.h gcc -c insert.c -o insert.o search.o:search.c search.h gcc -c search.c -o search.o files.o:files.c files.h gcc -c files.c -o files.o clean: rm exeprogram $(OBJS)
Makefile的自动变量
$* 不包含扩展名的目标文件名称
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$< 第一个依赖文件的名称
$? 所有时间戳比目标文件晚的依赖文件,并以空格分开
$@ 目标文件的完整名称
$^ 所有不重复的依赖文件,以空格分开
$% 如果目标是归档成员,则该变量表示目标的归档成员名称
OBJS=main.o command.o display.o insert.o search.o files.o CC=gcc CFLAGS=-Wall -O -g exeprogram:$(OBJS) $(CC) $^ -o $@ main.o:main.c defs.h (CC) $(CFLAGS) -c $< -o $@ command.o:command.c command.h (CC) $(CFLAGS) -c $< -o $@ display.o:display.c dispaly.h (CC) $(CFLAGS) -c $< -o $@ insert.o:insert.c insert.h (CC) $(CFLAGS) -c $< -o $@ search.o:search.c search.h (CC) $(CFLAGS) -c $< -o $@ files.o:files.c files.h (CC) $(CFLAGS) -c $< -o $@ clean: rm exeprogram $(OBJS)