用途
批量管理可执行文件
命名:makefile Makefile
- 1个规则
目标:依赖
(1个tab缩进)命令
1、目标的时间必须晚于依赖条件的时间,否则,更新目标
2、依赖条件如果不存在,找寻新的规则去产生依赖
eg:
makefile文件
a.out:helle.o add.o sub.o div.o
gcc hello.o add.o sub.o div.o -o a.out
hello.o:hello.c
gcc -c hello.c -o hello.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
div.o:div.c
gcc -c div.c -o div.o
3、设定终极目标
All:a.out - 2个函数
src = $(wildcard ./*.c) 匹配当前工作目录的所有.c文件。将文件名组成列表,赋值给变量src。 src = add.c sub.c div.c
obj = $(patsubst %.c, %.o, $(src)) : 将参数3中,包含参数1的部分,替换为参数2. obj = add.o sub.o div.o
clean: (没有依赖)
-rm -rf $(obj) a.out “-” 作用是删除不存在文件时,不报错,顺序执行结果。
make clean -n 演示执行代码,并非真执行操作。 - 3个自动变量
$@:表示规则中的目标
$<:表示规则中的第一个依赖条件,如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。
$^:表示规则中的所有依赖条件,组成一个列表,以空格隔开,如果这个列表中有重复的项则消除重复项
eg:
src = $(wildcard *.c) # add.c sub.c div.c
obj = $(patsubst %.c, %.o, $(src)) #add.o sub.o div.o
myArgs = -Wall -g
ALL:a.out
a.out: $(obj)
gcc $^ -o $@ $(myArgs)
#add.o:add.c
# gcc -c $< -o $@
#sub.o:sub.c
# gcc -c $< -o $@
#div.o:div.c
# gcc -c $< -o $@
$(obj):%.o:%.c
gcc -c %< -o $@ $(myArgs)
clean:
-rm -rf $(obj) a.out
.PHONY: clean ALL
-
模式规则
自动处理,新增代码不需要修改makefile文件
%.o:%.c
gcc -c $< -o $@ -
静态模式规则
$(obj):%.o:%.c
gcc -c $< -o $@
指定模式规则给谁用 -
.PHONY: clean ALL
生成伪目标,防止外界冲突不执行该执行