1:make
gcc 编译器
make - linux自带的构建器
构建的规则在makefile中
2:makefile文件的命名
makefile
Makefile
3:makefile中的规则
gcc a.c b.c c.c -o app
I:三部分:目标,依赖,命令
目标:依赖
(Tab缩减)命令
eg: app:a.c b.c c.c
gcc a.c b.c c.c -o app
II:makefile中可以🈶一条或多条规则组成
4:makefile的编写
版本一:
eg: app:a.c b.c c.c
gcc a.c b.c c.c -o app
版本二:
app:main.o add.o gcc main.o add.o-o app main.o:main.c gcc main.c -c add.o:add.c gcc add.c -c
makefile工作原理:
->:检查依赖是否存在:
->:向下搜索下边的规则,如果有规则则用来生成查找的依赖,执行规则中的命令
->:依赖存在,则判断是否需要更新
->:原则:目标的时间 > 依赖的时间
反之,则更新
版本三:
(1):自定义变量:obj = a.o b.o c.o
变量的取值:aa = $(obj)
(2):makefile自带的变量:大写
CPPFLAGS
CC
(3)自动变量:
$@: 规则中的目标
$<: 规则中的第一个依赖
$^: 规则中所有的依赖
只能在规则的 命令中使用
obj = main.o add.o sub.o mul.o target = app $(target):$(obj) gcc $(obj) -o $(target) %.o:%.c gcc -c $< -o $@
模式匹配:
%.o %.c
gcc $(obj) -o $(target) -> gcc $^ -o $@
5:makefile中的函数(可移植)
makefile中所有的函数都是有返回值
(1):查到指定目录下边指定类型的文件
->wildcard
eg: src = $(wildcard ./*.c)
(2):匹配替换
->patsubst
eg:obj: $(patsubst %.c,%.o,$(src))
src = $(wildcard ./*.c) obj = $(patsubst %.c,%.oc$(src)) target = app $(target):$(obj) gcc $^ -o $@ %.o:%.c gcc -c $< -o $@
6:清理项目
clean:
-rm $(obj) $(target) -f
声明伪目标:
.PHONY : clean
clean:
-rm $(obj) $(target) -f
浙公网安备 33010602011771号