$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表
如一个目录下有如下文件:
$ 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 $<