Makefile整理

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 *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值