1. 基本规则
target : 依赖
命令
make会由上往下的找target,也就是说,第一个target是最终目标。找到第一个target后,make寻找target文件,如果target不存在,则寻找target的依赖,一般最终目标的依赖都是“.o”的中间文件。如果有“.o”的文件不存在,make会继续往下寻找以该“.o”作为target的行,依次往下寻找。
Makefile会自动的推到“.o”的“.c”文件是它的依赖,并且自动的有
CC xx.c命令。
所以可以简化Makefile
objs = x1.o x2.o
target0: $(objs)
$(CC) -o target0 $(objs)
x1.o : x11.h x12.h
x2.o : x21.h x22.h
.PHONY : clean #表示clean是一个伪目标文件
clean :
rm -rf $(objs)
拥有相同依赖.h的.o也可以一起作目标,而把依赖写于其后。这是一种另类的结构。
x1.o x2.o : x12.h x21.h
Makefile 里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。
显式规则 : makefile的基本规则,
target : depends
command xx.c xx.c ...
隐晦规则 : 即makefile的自动推导等。
变量定义 : 可以用 '=',':=','?=','export','overide'
文件指示 : include
注释 : #注释
2. 搜索规则
make命令默认搜索名为Makefile,makefile的文件。
使用-f选项,可以指定make搜索的文件名。
Makefile支持三种通配符” * “,”?”,”[…]”。
makefile中的文件默认在,makefile文件所在目录下搜索。
可以通过两种方式更改makefile搜索文件的PATH。
1.特殊变量VPATH
VPATH = src:.../inc
#上面指明了,两个搜索路径,src和.../inc。
2.关键字vpath
2.1 vpath <pattern> <dir>
#为符合模式<pattern>的文件指定搜索目录<dir>。
2.2 vpath <pattern>
#清除符合模式<pattern>的文件的搜索目录。
2.3 vpath
#清除所有已被设置好了的文件搜索目录。
vapth 使用方法中的<pattern>需要包含“ %”字符。“ %”的意思是
匹配零或若干字符,例如, “%.h”表示所有以“.h”结尾的文件。
vpath的书写顺序就是搜索顺序。
3.伪目标
伪目标可以用来一次生成多个可执行文件,也可用来选择生成哪个可执行文件。
例1
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
#可以使用make命令一次生成多个可执行文件。
例2
.PHONY: cleanall cleanobj cleandiff
cleanall : cleanobj cleandiff
rm program
cleanobj :
rm *.o
cleandiff :
rm *