函数的使用方法
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:~$