makefile:项目管理文件
命名规则:makefile、Makefile
一个规则:
目标:依赖条件
(一个tab缩进)命令
1.目标的时间必须晚于依赖条件的时间,否则更新目标
2.依赖条件如果不存在,寻找新的规则去产生依赖
3.第一组目标作为终极目标
可以利用ALL:a.out
两个函数:
src = $(wildcard *.c):匹配当前工作目录下的所有.c文件,将文件名组成列表赋值给变量src
obj = $(patsubst %.c, %.o, $(src)):讲参数3中($(src)),包含参数1的部分替换为参数2
Clean:(没有依赖)
-rm -rf $(obj) a.out 删除当前目录下的a.呕吐以及所有.o文件
三个自动变量
$@:在规则的命令中,表示规则中的目标
$<:在规则的命令中,表示第一个依赖条件,如果将该变量应用在模式规则中,它可将依赖条件中的依赖依次取出
$^:在规则的命令中,表示所有依赖条件
例子:将当前目录下的add.c sub.c div.c 联合编译成a.out
makefile1: 第一阶段
a.out: add.o sub.o div.o hello.o
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
makefile2: 第二阶段
src = $(wildcard *.c) //add.c sub.c div.c hello.c
obj = $(patsubst %.c, %.o, $(src)) //add.o sub.o div.o hello.o
a.out:$(obj)
gcc $(obj)-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
clean:
-rm -rf $(obj) a.out
makefile3: 第三阶段
src = $(wildcard *.c) //add.c sub.c div.c hello.c
obj = $(patsubst %.c, %.o, $(src)) //add.o sub.o div.o hello.o
a.out:$(obj)
gcc $^-o $@
hello.o:hello.c
gcc -c $< -o $@
add.o:add.c
gcc -c $< -o $@
sub.o:sub.c
gcc -c $< -o $@
div.o:div.c
gcc -c $< -o $@
clean:
-rm -rf $(obj) a.out
makefile4: 模式规则、生成伪目标
src = $(wildcard *.c) //add.c sub.c div.c hello.c
obj = $(patsubst %.c, %.o, $(src)) //add.o sub.o div.o hello.o
.PHONY: clean ALL
a.out:$(obj)
gcc $^-o $@
%.o:%.c
gcc -c $< -o $@
clean:
-rm -rf $(obj) a.out
make 参数
-n:模拟执行make命令
-f:指定文件执行make命令