makefile用途
- 项目代码编译管理
- 节省编译项目时间
基本规则
- 若想生成目标,检查规则中的依赖条件是否存在,若不存在,则寻找是否有规则用来生成该依赖文件
- 检查规则中的目标是否需要更新,必须检查它的所有依赖,依赖中有任一个被更新 ,则目标必须更新
- 目标的时间必须晚于依赖的时间,否则更新目录
- 依赖不存在,寻找新的规则去产生依赖
//一个规则
目标:依赖
命令
两个函数
wildcard函数
src = $(wildcard *.c)
//找到当前目录下所有后缀为.c的文件,赋值给src
patsubst函数
obj = $(patsubst %.c,%.o,$(src))
//把src变量里所有后缀为.c的文件替换为.o
三个自动变量
- $@:在规则命令中,表示规则中的目标
- $^:在规则命令中,表示所有依赖条件
- $<:在规则命令中,表示第一个依赖条件
模式规则
%.o:%.c
自定义变量
- $@依赖项
- $<
###写法一
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 -c main.c
add.o:add.c
gcc -c add.c
mul.o:mul.c
gcc -c mul.c
sub.o:sub.c
gcc -c sub.c
写法二
obj=main.o add.o sub.o mul.o
target=app
$(target):$(obj)
gcc $(obj) -o $(target)
%.o:%.c
gcc -c $< -o $@