主要是用于自己的一个学习记录
ifeq
类比 if(a==b)
strip
去掉开头结尾的空格,将字符串中间连续的的空格合并为1个,例如是“a b c”,变为“a b c”
fliter
过滤函数,$(filter PATTERN…,TEXT)
匹配TEXT中符合PATTERN的字符,PATTERN可能有多个
返回值:TEXT中所有符合PATTERN的字符,若有多个,则用空格分隔。
换号符号
使用 \ 即可换行
call函数
我个人的理解是,call函数可以按照某种模式,来可变的创造变量。
例如下例
test =
(
1
)
(1)
(1)(2)
foo = $(call test,a,b),得出来的结果foo就是"a b"。这个test中的1,2就是参数的顺序。foo中的a对应的就是第一个,也就是1,b对应的是2。这个1,2顺序是可变的
eval函数
简单的把eval函数理解为,先把后面的内容解析然后展开来,然后在make的时候再运行一次
firstword:
$(firstword NAMES…)
$(firstword foo bar)
返回值为“foo”
word-colon函数
主要作用是将字符串中的冒号替换为空格,需要注意前面空格的表示.
define word-colon
$(word
(
1
)
,
(1),
(1),(subst :,
(
s
p
a
c
e
)
,
(space),
(space),(2)))
endef
显然,上面这个函数相关的有三个,word,subst,space
word是用来取字符串中的第几个词
subst函数
其实就是字符替换,上例就是对字符串$(2),把冒号用空格代替
word函数:
$(word n,text)
返回text的第n个单词,n从1开始计算,如果n比text含有的单词总数大,则返回空。
if的使用
makefile中if分为在TARGET外部和TARGET内部,TARGET内部中使用的时候,是作为shell脚本使用的。
TARGET内部使用时,格式为if [ 条件 ]; then 语句1; 语句2; else 语句3; 语句4; fi
这里主要注意[ ] 这两个符号和条件之间需要空格,并且shell环境中的语句需要放在一行,如果太长,可以使用 \ 来进行换行
变量
目标变量,仅在目标文件以及相关的规则的中使用
TARGET: := variable