Makefile

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)

 

posted on 2017-11-22 22:46  Itsad  阅读(243)  评论(0编辑  收藏  举报

导航