Makefile的内在规则与使用

基础语法

目标:依赖1 依赖2 依赖3
如果依赖目标新,那么执行命令
例如

test :a.o b.o
gcc -o test a.o b.o

a.o : a.c
gcc -c -o a.o a.c

b.o : b.c
gcc -c -o b.o b.c

执行规则

执行规则就是,当某个依赖文件不存在,或者依赖比目标新,就会产生对应的编译动作
写makefile时还有更简单的方法,利用通配符%

%.o:表示所用的.o文件
%.c:表示所有的.c文件
\$\@:表示目标
\$\<:表示第1个依赖文件
\$\^:表示所有依赖文件

相当于C语言里面的冒号一样,就省了写那么多规则了
makefile调用语法为make 目标,如果没有制定目标,就像我们常用的make,它就默认执行第一个目标

变量

对于makefile的变量大概分为即时变量和延时变量:
即时变量创建立刻确定值
延时变量使用时才会赋值

:=  即时变量
=   延时变量
?=  延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
\+= 附加, 它是即时变量还是延时变量取决于前面的定义

函数

foreach

$(foreach a,b,c)

把b赋给a,然后按c的格式改写,如:

A = a b c
B = $(foreach f, &(A), $(f).o)

all:
	@echo B = $(B)

就会输出B = a.o b.o c.o

filter/filter-out

$(filter aaa...,text)

从text中取出符合aaa形式的值

$(filter-out aaa...,text)

从text中取出不符合aaa形式的值

Wildcard

$(wildcard aaa)

在当前目录下取出复合aaa形式的文件,如$(wildcard *.c)就取出所有.c文件

$(wildcard $(files2))

还可以这样取出files2中真实存在的文件

Patsubst

$(patsubst 格式1,格式2,$(文件/变量))

文件或变量中取出符合格式1的,将其替换为格式2,
实际应用如:$(patsubst %.c,%.d,$(files))将files中的.c文件替换成.d文件

依赖的查询与添加

gcc -M c.c // 打印出依赖

gcc -M -MF c.d c.c  // 把依赖写入文件c.d

gcc -c -o c.o c.c -MD -MF c.d  // 编译c.o, 把依赖写入文件c.d
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值