本文共 1588 字,大约阅读时间需要 5 分钟。
注意:文档中的Makefile尽量不要复制 容易出问题
test: A B C @echo '$$@ = ' $@ #$@ 当前目标 @echo '$$^ = ' $^ #$^ 当前规则中的所有依赖 @echo '$$< = ' $< #$< 依赖中的第一个 @echo '$$$$ = ' $$$$ #$$ 当前执行的进程编号 @echo '$$* = ' $* #$* 模式规则中所有%匹配的部分 @echo '$$? = ' $? #$? 模式规则中所有比目标更新的文件列表A: touch AB: touch BC: touch C
输出结果:
$@ = test $^ = A B C $< = A $$ = 17678 $* = $? = A B C#a.out: main.c test.c# gcc main.c test.cTGT = a.outSRCS = main.c test.c $(TGT): $(SRCS) gcc $^ -o $@clean: rm -f $(TGT)
TGT = a.outSRCS = main.c test.cOBJ = main.o test.oCC = gcc$(TGT): $(OBJ) $(CC) $^ -o TGT main.o: main.c $(CC) -c $^ -o $@test.o: test.c $(CC) -c $^ -o $@clean: rm -f $(TGT) $(OBJ)
模式规则中记得要用$<(依赖中的第一个)
TGT = a.outSRCS = main.c test.cOBJ = main.o test.oCC = gcc$(TGT): $(OBJ) $(CC) $^ -o $@%.o: %.c $(CC) -c $< -o $@ # 这个%.o应该是对应一个匹配的文件 所以后面加上 -o $@ 也是没问题的 不写也是没问题的(默认就会生成%.o)clean: rm -f $(TGT) $(OBJ)
TGT = a.outSRCS = main.c test.cCC = gcc# 将源文件中的.c生成.o$(TGT): $(SRCS:.c=.o) $(CC) $^ -o #@# 模式规则是一个循环取出的过程,每次取出一个.c,然后调用命令生成.o,直到将所有的.c取完为止%.o: %.c $(CC) -c $< clean: rm -f $(TGT) $(SRCS:.c=.o)
#%.o: %.c# $(CC) -c $< # 这条规则可以不写 因为make会自动根据.o查找对应的.c文件编译生成.o 这就是隐含规则
在模式规则中,必须用$< ? 经过测试 使用$^和$
输出结果:
zys@ubuntu:~/linux/application/makefile/p4$ make gcc -c main.c -o main.o main.o main.c main.c gcc -c test.c -o test.o test.o test.c test.c gcc main.o test.o -o a.out转载地址:http://uxqqj.baihongyu.com/