最基本的规则
#是注释
目标文件:依赖文件
[TAB]指令
第一个目标文件是我们的最终目标!!!递归
伪目标 .PHONY: (不是为了生成某个目标,只是单纯的想执行某条命令)
例如:rm -rf hello.o hello.S hello.i hello
第一层 显示规则
hello:hello.o
gcc hello.o -o hello
hello.o:hello.S
gcc hello.S -o hello.o
hello.S:hello.i
gcc hello.i -o hello.S
hello.i:hello.c
gcc hello.c -o hello.i
.PHONY:
clean:
rm -rf hello.o hello.S hello.i hello
第二层 变量= 追加+= :=恒等 使用$(变量名)替换
TAR=test
OBJ=circle.o cube.o main.o
CC:=gcc
$(TAR):$(OBJ)
$(CC) $(OBJ) -o $(TAR)
circle.o:circle.c
$(CC) -c circle.c -o circle.o
cube.o:cube.c
$(CC) -c cube.c -o cube.o
main.o:main.c
$(CC) -c main.c -o main.o
.PHONY:
cleanall:
rm -rf $(OBJ) $(TAR)
clean:
rm -rf $(OBJ)
第三层 隐含规则 %.c %.o 任意的.c .o .c.o所有.c .o
TAR=test
OBJ=circle.o cube.o main.o
CC:=gcc
$(TAR):$(OBJ)
$(CC) $(OBJ) -o $(TAR)
%.o:%.c
$(CC) -c %.c -o %.o
.PHONY:
cleanall:
rm -rf $(OBJ) $(TAR)
clean:
rm -rf $(OBJ)
第四层 通配符 $^所有的依赖文件 $@所有的目标文件 $<所有依赖文件的第一个文件
TAR=test
OBJ=circle.o cube.o main.o
CC:=gcc
$(TAR):$(OBJ)
$(CC) $^ -o $@
%.o:%.c
$(CC) -c $^ -o $@
.PHONY:
cleanall:
rm -rf $(OBJ) $(TAR)
clean:
rm -rf $(OBJ)