Makefile自动化变量声明

        模式规则类似于普通规则只是在模式规则中,目标名中需要包含有模式字符“%”(一个),包含有模式字符“%”的目标被用来匹配一个文件名,“%”可以匹配任何非空字符串规则的依赖文件中同样可以使用“%”依赖文件中模式字符“%”的取值情况由目标中的“%”来决定。例如:对于模式规则“%.o : %.c”,它表示的含义是:所有的.o文件依赖于对应的.c文件。
自动化变量    说明
$@    表示规则的目标文件名。如果目标是一个文档文件(Linux 中,一般成 .a 文件为文档文件,也成为静态的库文件),那么它代表这个文档的文件名。在多目标模式规则中,它代表的是触发规则被执行的文件名
$%    当目标文件是一个静态库文件时,代表静态库的一个成员名。
$<    规则的第一个依赖的文件名。如果是一个目标文件使用隐含的规则来重建,则它代表由隐含规则加入的第一个依赖文件。
$?    所有比目标文件更新的依赖文件列表,空格分隔。如果目标文件时静态库文件,代表的是库文件(.o 文件)。
$^    代表的是所有依赖文件列表,使用空格分隔如果目标是静态库文件,它所代表的只能是所有的库成员(.o 文件)名
一个文件可重复的出现在目标的依赖中,变量“$^”只记录它的第一次引用的情况。就是说变量“$^”会去掉重复的依赖文件。
$+    类似“$^”,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时库的交叉引用场合。
$*    在模式规则和静态模式规则中,代表“茎”。“茎”是目标模式中“%”所代表的部分(当文件名中存在目录时,“茎”也包含目录部分)。
 

test:test.o test1.o test2.o
    gcc -o $@ $^
test.o:test.c test.h
    gcc -o $@ $<
test1.o:test1.c test1.h
    gcc -o $@ $<
test2.o:test2.c test2.h
    gcc -o $@ $<

赋值操作:

        赋值的符号“=”

        使用的‘‘’=’在给表量赋值的时候不一定要用的已经定义好的值,也可以使用的后面的进行定义的值:

name = zzk 
curname = $(name)
name = zuozhongkai
print:
    @echo curname:$(curname)


输出的值为:curname: zuozhongkai

赋值的符号“:=”

        赋值运算符:=只会使用的前面定义的变量,不会使用后边定义的变量

赋值的符号“?=”

name ?= zuozhongkai
如果变量的没有被赋值,那么使用的当前的变量,如果的赋值了使用的之前的变量

赋值的符号“+=”

object = main.o input.o
object += calcu.o 
追击赋值的时候object为: main.o input.o  calcu.o 

Makefile 函数的使用

Makefile函数,类似的C语言一样,Makefile的函数的定义格式为

$(函数名,参数集合) 或者为${函数名,参数集合}
  •   函数subst
$(subst <from>,<to>,<text>)
将的字符串text中的<from>内容替换为<to>
$(subst zzk,ZZK,name is zzk)
输出的结果的为name is ZZK
  • 函数patsubst
$(patsubst <pattern>,<replacement>,<text>)
此函数查找字符text中的字符中的单词是否符合的pattern的模式,如果符合这些模式的用replacement进行
替换,如果的<pattern>可以使用的通配符%,表示任意长度的字符串,如果的<replacement>中也包含的“%”
$(patsubst %.c,%.o,a.c,b.c.c.c)
替换的结果为
a.o b.o c.o
  • 函数dir
$(dir <name...>)
此函数用来的获取的目录
$(dir </src/a.c>)
输出结果为/src
  • 函数notdir
$(notdir <name...>)
此函数用来去除name中的文件名
$(dir </src/a.c>)
输出结果为a.c
  • 函数foreach
$(foreach <var>,<list>,<text>)
此函数用来吧参数的list椎间盘每个的大妈参加哦逐一的提取出来,放在的<var>中,之后可以执行对应的<text>
  • 函数wildcard
$(wildcard PATTERN...)
%只在用在规则的中,
$(wildcard *.c)
获得的当前目录下所有的的.c文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值