make/makefile学习

1、makefile函数

1.1、字符串替换函数:subst

函数原型: $(subst <from>,<to>,<text>)
名称: 字符串替换函数——subst。
功能: 把字串<text>中的<from>字符串替换成<to>
返回: 函数返回被替换过后的字符串。

1.2、模式字符串替换函数:patsubst

函数原型: $(patsubst <pattern>,<replacement>,<text>)
功能: 查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。这里,<pattern>可以包括通配符“%”, 表示任意长度的字串。 如果<replacement>中也包含“%”, 那么, <replacement>中的这个“%”将是<pattern>中的那个“%”所代表的字串。(可以用“\”来转义, 以“%”来表示真实含义的“%”字符)
返回: 函数返回被替换过后的字符串。

1.3、去空格函数:strip

函数原型:$(strip <string>)
名称:去空格函数——strip。
功能:去掉<string>字串中开头和结尾的空字符。注意这里只去掉开头和结尾。
返回:返回被去掉空格的字符串值。

1.4、查找字符串函数:findstring

2、=、:=、?=区别

通过查询资料及试验,个人感觉这3中赋值语法的区别主要是:

  • = 赋值,无论变量在makefile中被赋值多少次,最后一次赋值将被应用于整个makefile.
  • :=赋值,变量在makefile中的赋值立即生效,如果变量被更改,更改也立即生效。
  • ?=赋值,变量没有被定义时,定义变量并赋值。如果变量已经存在,则忽略赋值操作。

试验代码:


a = hello # not the last, skip
b = $(a) world
a = okay # not the last, skip
a = OKAY # the last change is applied.

c := hello # the immediate value is applied
d := $(c) world
c := okay

e ?= hello # the first change is applied
e ?= HELLO # already exist, skip
f ?= $(e) world
e ?= world

all:
    @echo "=        "$(b)
    @echo ":=       "$(d)
    @echo "?=       "$(f)                  

输出:
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思禾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值