14.条件判断
libs_for_gcc=-lgnu
normal_libs=
ifeq ($(CC),gcc)
$(CC) -o foo $(objs) $(libs_for_gcc)
else
$(CC) -o foo $(objs) $(normal_libs)
endif
简洁版本
libs_for_gcc=-lgnu
normal_libs=
ifeq ($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif
foo:$(objs)
$(CC) -o foo $(objs) $(libs)
15使用函数
$(subst <from>, <to>, <text>)
把<text>中的<to>字符串替换为<from>
$(patsubst <pattern>, <replacement>, <text>)
模式字符串替换函数
$(patsubst %.c, %.o, x.c.c sub.c)
替换结果为x.c.o sub.o
$(strip <string>)
去掉开头和结尾的空格
$(findstring <find>, <in>)
在in字符串里面查找find字符串
$(filter <pattern..>, <text>)
保留pattern,过滤text
source:=foo.c bar.c baz.S uga.h
foo:$(source)
cc $(filter %.c %.S, $(source)) -o foo
$(filter %.c %.S, $(source))返回值为foo.c baz.S
$(filter-out <pattern...>, <text>)
去掉pattern的字符串
$(sort <list>)
排序list并去掉相同的单词
$(sort foo bar ss)
结果为bar foo ss
$(word <n>, <text>)
取出text中第n个单词
例如$(word 2, foo bar baz)返回值是bar
$(wordlist <s>, <e>, <text>)
取回单词串
$(wordlist 2, 3, foo bar baz)
返回值是bar baz
$(words <text>)
统计单词的个数
$(words foo bar baz)返回3
$(firstword <text>)
返回第一个单词
$(firstword foo bar baz)
返回foo
16.文件名操作函数
$(dir <name...>)
取出目录函数
$(dir src/foo.c hacks)返回值是
src/ ./
$(notdir <name...>)
取出文件函数
$(notdir src/foo.c hacks)
返回值为foo.c hacks
$(suffix <names...>)
取后缀函数
$(suffix src/foo.c src-1.0/bar.c hacks)
返回值为.c .c
$(basename <names...>)
取前缀函数
$(basename src/foo.c src-1.0/bar.c hacks)
返回值为src/foo src-1.0/bar hacks
$(addsuffix <suffix>, <names...>)
添加后缀函数
$(addsuffix .c, foo bar)返回值为
foo.c bar.c
$(addprefix <prefix>, <names>)
添加前缀
$(addprefix src/, foo bar)返回值为
src/foo src/bar
$(join <list1>, <list2>)
把<list2>中的单词对应添加到<list1>后面,若
list2多余list1,则list2多出的部分不变,连接
到返回字符串,若list1多于list2,则多余的部分
不变,添加到返回字符串后面
$(join aaa bbb, 111 222 333)返回值为
aaa111 bbb222 333
$(foreach <var>, <list>, <text>)
依次从<list>中取出字符串放入<text>中进行运算且
返回
例子:
names:=a b c d
files:=$(foreach n, $(names), $(n).o)
files的值为a.o b.o c.o d.o
$(if <conditions>, <then-part>)
$(if <conditions>, <then-part>, <else-part>)
$(call <expression>, <parm1>, <parm2>, <parm3>...)
可以创建新的参数化的函数
例子:
reverse=$(1) $(2)
foo=$(call reverse, a, b)
foo的值为a b