在Makefile 中也#开始的行都是注释行.Makefile 中最重要的是描述文件的依赖关系的说 明.一般的格式是: 

target: components

TAB rule

第一行表示的是依赖关系.第二行是规则.

main:main.o mytool1.o mytool2.o

    gcc -o main main.o mytool1.o mytool2.o

main.o:main.c mytool1.h mytool2.h

    gcc -c main.c

mytool1.o:mytool1.c mytool1.h

    gcc -c mytool1.c

mytool2.o:mytool2.c mytool2.h

    gcc -c mytool2.c

 

Makefile 有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是:

$@-- 目标文件,$^--所有的依赖文件,$<--第一个依赖文件.

main:main.o mytool1.o mytool2.o

gcc -o $@ $^

main.o:main.c mytool1.h mytool2.h

gcc -c $<

mytool1.o:mytool1.c mytool1.h

gcc -c $<

mytool2.o:mytool2.c mytool2.h

gcc -c $<

 

一个Makefile 的缺省规则

..c.o:

gcc -c $<

这个规则表示所有的 .o 文件都是依赖与相应的.c 文件的.例如mytool.o 依赖于mytool.c

main:main.o mytool1.o mytool2.o

gcc -o $@ $^

..c.o:

gcc -c $<