Makefile 常用函数

函数的使用方法

findstring 函数

syntax: $(findsring FIND,IN)

func: 在字符串“IN”中查找字符串“FIND”。如果找到则返回“FIND”,没有找到则返回空。

# example
$(findstring a,a b c) # 函数返回值为 a
$(findstring a,b c) # 函数返回为空

注意:查找时会匹配大小写。

if 函数

syntax: $(if CONDITION,THEN-PART[,ELSE-PART])

func: 如果CONDITION为真,则将THEN-PART作为函数的计算表达式;如果为假,则将ELSE-PART作为函数的计算表达式。

关键是CONDITION何时为真。如果CONDITION的展开结果去掉开头和结尾的空格后为非空则为真,否则为假。

# example
empty:=
space:= $(empty) $(empty)
$(if $(findstring $(space),$(TOPDIR)),$(error ERROR: The path to the OpenWrt directory must not include any spaces))

# 判断变量 TOPDIR 中是否包含空格,有就报错

warning & error 函数

warning函数的用法与error函数类似。

error 函数

syntax: $(error TEXT...)

func: 产生致命错误,提示“TEXT…”给用户,并终止make的执行。

warning 函数

syntax: $(warning TEXT...)

func: 提示警告信息“TEXT…”给用户,与error函数不同的是,warning函数不会终止make的执行。

需要说明的是

“error”函数是在函数展开时(函数被调用时)才提示信息并结束 make 进程。

如果函数出现在命令中或者一个递归的变量定义中时,在读取 Makefile 时不会出现错误。而只有包含“error”函数引用的命令被执行,或者定义中引用此函数的递归变量被展开时,才会提示致命信息“TEXT…”同时退出 make。

value 函数

syntax: $(value VARIABLE)

func: 不对变量“VARIBLE”进行任何展开操作, 直接返回变量“VARIBALE”的值. 这里“VARIABLE”是一个变量名, 一般不包含“$”(除非计算的变量名).

# example
FOO1 = abcd
FOO2 = $PATH
all:
	@echo $(FOO1)        #第一行
	@echo $(value FOO1)  #第二行
	@echo $(FOO2)        #第三行
	@echo $(value FOO2)  #第四行

# 第一行结果:abcd
# 第二行结果:abcd
# 第三行结果:ATH
# 第四行结果:变量PATH中的值。如:/usr/local/sbin:/usr/local/bin:/usr/sbin

strip 函数

syntax: $(strip string)

func: Removes leading and trailing whitespace from string and replaces each internal sequence of one or more whitespace characters with a single space. 将字符串的头部和尾部的空格去掉,中间连续的多个空格替换为一个空格。

# example:
STR = a b c  #
LOSTR = $(strip $(STR))
# LOSTR 的值是:a b c

basename 函数

注意:该函数的返回值 和 终端命令行下的basename命令的返回值 的区别。

$(basename kern/debug/kdebug.c) 的返回值为 kern/debug/kdebug

$(basename kern/debug/kdebug.x.c) 的返回值为 kern/debug/kdebug.x

# 在终端命令行下:
zyao@ubuntu:~$ basename kern/debug/kmonitor.c
kmonitor.c
zyao@ubuntu:~$ basename kern/debug/kmonitor.x.c
kmonitor.x.c
zyao@ubuntu:~$
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值