文章目录
- 1、makefile函数
- 1.1、字符串替换函数:subst
- 1.2、模式字符串替换函数:patsubst
- 1.3、去空格函数:strip
- 1.4、查找字符串函数:findstring
- 2、=、:=、?=区别
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)
输出: