语法
一、显示规则
1)目标文件:依赖文件
[TAB]指令([TAB]是键位)
2)第一个目标文件是我们的最终目标
3)#是注释
4)伪目标伪目标:.PHONY:
#第一个目标文件是最终目标!!!像递归
hello:hello.o
gcc hello.o -o hello
hello.o:hello.s
gcc -c hello.s -o hello.o
hello.s:hello.i
gcc -S hello.i -o hello.s
hello.i:hello.c
gcc -E hello.c -o hello.i
二、变量
=(替换)
+=(追加)
:=(恒等于)
变量 =(替换)+=(追加):=(恒等于)
#如果需要替换需要加上$
#gcc不能变所以用:=
TAR = main
OBJ = add.o multi.o main.o
CC := gcc
$(TAR):$(OBJ)
$(CC) $(OBJ) -o $(TAR)
add.o:add.c
$(CC) -c add.c -o add.o
multi.o:multi.c
$(CC) -c multi.c -o multi.o
main.o:main.c
$(CC) -c main.c -o main.o
#追加
TAR1 = main
三、隐含规则
#隐含规则 %.c %.o 任意的.c或者.o c *.o所有的.c .o
TAR = main
OBJ = add.o multi.o main.o
CC := gcc
$(TAR):$(OBJ)
$(CC) $(OBJ) -o $(TAR)
%.o:%.c
$(CC) -c %.c -o %.o
四、通配符
#通配符$^所有的依赖文件 $@所有的目标文件 $<所有的依赖文件的第一个文件
TAR = main
OBJ = add.o multi.o main.o
CC := gcc
RMRF := rm -rf
$(TAR):$(OBJ)
$(CC) $^ -o $@
%.o:%.c
$(CC) -c $^ -o $@
.PHONY:
clearnAll:
$(RMRF) *.o main
clearn:
$(RMRF) *.o