makefile笔记04

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

转载于:https://my.oschina.net/tonyyang/blog/15588

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值