1.make是什么?
gcc—编译器
make—Linux自带的构建器(方便管理整个项目)
构建的规则在makefile中
2.makefile的命名方式
-GUNmakefile
-makefile
-Makefile
3.makefile工作原理
检查依赖是否存在
[1]检测依赖不存在:
向下搜索下边的规则,如果有规则是用来生成查找的依赖的,执行规则中的命令
[2]检测依赖存在:
原则:
目标时间 > 依赖的时间 不更新
目标时间 !> 依赖的时间 更新
4.三种变量
1.自定义变量
2.makefile自带的变量:大写
CPPFLAGS
CC
3.自动变量
$@:规则中的[目标]
$<:规则中的[第一个依赖]
$^:规则中的[所有的依赖]
注意:自动变量只能在规则中的命令中使用
5.模式匹配 %
6.makefile中的函数
makefile中的所有的函数都有返回值,函数介绍:
1.查找指定目录下指定类型的文件
src=$(wildcard ./*.c)
2.匹配替换
obj=$(patsubst %.c,%o,$(src)) #从$(src)文件中,将.c替换成.o
7.makefile中的语法规则
1.makefile中有一条或多条规则构成
2.makefile的每条规则包括三部分:目标,依赖文件,命令
3.语法格式:
目标:依赖文件
命令
8.编写清理项目的规则
.PHONY:clean #声明伪目标
clean:
-rm $(obg) $(target) -f
解释:
命令rm前加“-”,表示忽略错误,继续向下执行
9.让make生成不是终极目标的目标,执行下面命令
make 目标名
10.[实战]
使用gcc编译程序:gcc main.c add.c sub.c mul.c -o app
==>转换成makefile编译程序:
[版本1]
app:main.c add.c sub.c mul.c
gcc main.c add.c sub.c mul.c -o app
缺点(效率低,修改一个文件,所有文件都会被重新编译)
[版本2]
app:main.o add.o sub.o mul.o
gcc main.o add.o sub.o mul.o -o app
main.o:main.c
gcc main.c -c
add.o:add.c
gcc add.c -c
sub.o:sub.c
gcc sub.c -c
mul.o:mul.c
gcc mul.c -c
优点:改变某个.c文件,再执行make后,只编译修改后的文件
缺点:冗余
[版本3]
obj=main.o add.o sub.o mul.o
target=app
$(target):$(obj)
gcc $(obj) -o $(target) # gcc $^ -o $@
%.o:%.c
gcc -c $< -o $@
缺点:可以执行差,可以使用[函数]解决
[版本4]
src=$(wildcard ./*.c)
obj=$(patsubst %.c,%o,$(src))
target=app
$(target):$(obj)
gcc $(obj) -o $(target) # gcc $^ -o $@
%.o:%.c
gcc -c $< -o $@
11.[总结模板]:常用的makefile的书写方式
扫描二维码关注公众号,回复:
3596846 查看本文章
obj= #.o文件
target= #可执行文件
$(target):$(obj)
$(CC) $(obj) -o $(target) # $(CC) $^ -o $@
%.o:%.c
$(CC) -c $< -o $@
.PHONY:clean #伪目标
clean:
-rm $(obj) $(target) -f