makefile
命名: makefile Makefile
1个规则
目标:依赖条件
(一个tab缩进)命令
1、目标的时间必须晚于依赖条件的时间,否则,更新目录
2、依赖条件如果不存在,找寻新的规则去产生依赖
ALL :指定makefile 的终极目标
2个函数
src = $(wildcard *.c)
找到当前目录下所有后缀为.c 的文件。将文件名组成列表,赋值给src
obj = $(patsubst %.c,%.o, $(src))
把src 变量里所有后缀为.c的文件替换成.o
clean: (没有依赖)
rm -rf $(obj) $(PROJECT_NAME)
3个自动变量:
$@:在规则的命令中,表示规则中的目标 (只能出现在命令中表示)
$^ :在规则的命令中,表示的所有依赖条件,组成一个列表,以空格隔开,如果这个列表中有重复的项则清楚重复项。
$< : 在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,
它可将依赖条件列表中的依赖依次取出,套用模式规则。(就是依赖条件中的第一个文件)
模式规则:
%.o:%.c
gcc -c $< -o $@
静态模式规则:
意思就是如果obj找规则就需要走下面的地方,就是指定走哪个规则。
$(obj):%.o:%.c
gcc -c $< -o $@
伪目标:
.PHONY: clean
clean:
rm -f *.o $(PROJECT_NAME)
或者 .PHONY:clean ALL
makefile
src = $(wildcard *.c)
obj = $(patsubst %.c,%.o, $(src))
myArgs = -Wall -g
All:a.out
a.out:$(obj)
gcc $^ -o $@ $(myArgs)
$(obj):%.o:%.c
gcc -c $< -o $@ $(myArgs)
clean:
rm -rf $(obj) a.out
.PHONY:clean ALL
原始文件makfile
ALL:a.out
a.out:hello.o add.o sub.o
gcc hello.o add.o sub.o
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
hello.o:hello.c
gcc -c hello.c -o hello.o