make
2.1 make
大型程序维护工具
Makefile或 makefile: 告诉make维护一个大型程序,该做什么。Makefile说明了组成程序的各模块间的相互关系及更新模块时必须进行的动作,make按照这些说明自动地维护这些模块。
在makefile(Makefile)中,自顶向下说明各模块之间的依赖关系及实现方法:
network: network.o subrs.o (1)
cc –o network network.o subrs.o (2)
network.o: network.c netdefs.h (3)
cc –c network.c (4)
subrs.o: subrs.c netdefs.h (5)
cc –c subrs.c (6)
其中(3)—(6)可以简化为:(隐含的规则)
network.o subrs.o: netdefs.h
#make
#make network
#make –f makefile
2.2makefile要点
(1) 宏(变量)
CC=gcc
$(CC) test.c
$@: current target
$<:firstprerequisite
$^:allprerequisites
(2) 后缀规则(suffix rules)
.c.o:
$(CC) -c $(CFLAGS) -o $@ $<
(3) 模式规则(pattern rules)
%.o:%.c
$(CC) -c $(CFLAGS) -o $@ $<
(4) 通配符*
objects = *.o
objects := $(wildcard *.o)
objects := $(patsubst %.c,%.o,$(wildcard *.c))
foo : $(objects)
cc -o foo $(objects)
(5) phonytarget(哑/假目标):不对应实际的文件,只是一个目标
.PHONY:clean #如果这行不加,若当前目录下有一个clean文件,则make clean 没有动作
clean: #这是phonytarget
rm *.o temp
(6) includefilename:嵌套makefile,暂停当前makefile,转而读取指定的filename
-include filename:忽略找不到filename时的错误
(7) 控制语句:ifeq, ifneq