第一层
# 第一个Makefile
# 其中#为注释
# 先生成c++的可执行文件
#单文件
# 第一个目标文件是我们的最终目标!递归
# 目标文件 : 依赖文件
main : main.o
g++ main.o -o main
main.o : main.s
g++ -c main.s -o main.o
main.s : main.i
g++ -S main.i -o main.s
main.i : main.cpp
g++ -E main.cpp -o main.i
# 伪目标
.PHONY :
clear: #make clear
rm -rf main.i main.s main.o
# 多文件
test : circle.o cube.o main.o
g++ circle.o cube.o main.o -o test
circle.o : circle.c
g++ -c circle.c -o circle.o
cube.o : cube.c
g++ -c cube.c -o cube.o
main.o : main.c
g++ -c main.c -o main.o
第二层
变量:
= (替换)
+= (追加)
:= (恒等于)
使用变量:
$(变量名) 替换
TAR = test
# TAR += test1
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 :
clear: #make clear
rm -rf $(OBJ) test
第三层
隐含规则:%.c %.o 任意的.c或者.o文件 *.c *.o 所有的.c .o
TAR = test
# TAR += test1
OBJ = circle.o cube.o main.o
CC := gcc # 不会改变
$(TAR) : $(OBJ)
$(CC) $(OBJ) -o $(TAR)
%.o : %.c
$(CC) -c %.c -o %.o
.PHONY :
clear: #make clear
rm -rf $(OBJ) test
第四层
通配符
$^ 所有的依赖文件
$@ 所有的目标文件
$< 所有的依赖文件的第一个文件
TAR = test
# TAR += test1
OBJ = circle.o cube.o main.o
CC := gcc # 不会改变
RMRF := rm -rf
$(TAR) : $(OBJ)
$(CC) $^ -o $@
%.o : %.c
$(CC) -c %.c -o %.o
.PHONY :
clear: #make clear
$(RMRF) $(OBJ) test