makefile一些特殊符号的用法

$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表

如一个目录下有如下文件:

$ ls
hello.c  hi.c  main.c  Makefile

按照 Makefile 规则规规矩矩的写(注意每条规则都是TAB打头):

main: main.o hello.o hi.o
	gcc -o main main.o hello.o hi.o

main.o: main.c
	cc -c main.c

hello.o: hello.c
	cc -c hello.c

hi.o: hi.c
	cc -c hi.c

clean:
	rm *.o
	rm main

改为用上述符号进行替代:

main: main.o hello.o hi.o
	gcc -o $@ $^
main.o: main.c
	cc -c $<
hello.o: hello.c
	cc -c $<
hi.o: hi.c
	cc -c $<
clean:
	rm *.o
	rm main

这里makefile还有一个缺省规则,使得其变得更加简单:

.c.o: 
	gcc -c $<

这条规则表示所有的.o文件都是依赖于相应的(在这里我理解的就是同名的).c文件。例如mytool.o依赖于mytool.c。如此一来makefile还可以变为:

# 这是再一次简化后的Makefile
main: main.o mytool1.o mytool2.o
	gcc -o $@ $^

.c.o: 
	gcc -c $<

参考资料

makefile $@, $^, $<, $?
makefile 中 $@ $^ %< 使用

发布了22 篇原创文章 · 获赞 0 · 访问量 1286

猜你喜欢

转载自blog.csdn.net/qq_35238352/article/details/102002017