标签:nbsp src pattern lib log text 命名 path prefix
通过函数能显著增强Makefile的功能。对于simple项目的Makefile,尽管使用了模式规则,但还是有一件比较麻烦的事情,就是要在Makefile中指明每一个项目源文件。下面介绍几个后期会使用到的函数,更多请参考《GUN Make》。
1.abspath函数
从命名就应该能够猜出它的作用。abspath函数用于将_name中的各路径名转化成绝对路径,并将转化后的结果返回。调用形式为:
$(abspath _name)
1 .PHONY: all 2 root :=$(abspath /uer/../lib) 3 all: 4 @echo $(root)
2.addprefix函数
addprefix函数用于给名字列表_name中的每一个名字增加前缀_prefix,并将增加了前缀的名字列表返回,调用形式为:
$(addprefix _prefix,_name)
1 .PHONY: all 2 without_dir=main.c foo.c 3 with_dir :=$(addprefix objs/,$(without_dir)) 4 all: 5 @echo $(with_dir)
3.addsuffix函数
和前面addprefix刚好相反,addsuffix函数为_name增加后缀_suffix,调用形式为:
$(addsuffix _suffix,_name)
1 .PHONY: all 2 without_dir=main foo 3 with_dir :=$(addsuffix .c,$(without_dir)) 4 all: 5 @echo $(with_dir)
4.filter函数
filter函数被用于从一个名字列表_text中根据模式_patterm得到满足需要的名字列表并返回,其形式是:
$(filter _pattern,_text)
1 .PHONY: all 2 sources =foo.o bar.c main.c hell.s 3 sources :=$(filter %.c %.s,$(sources)) 4 all: 5 @echo $(sources)
5.eval函数
eval函数的存在使得Makefile具有动态语言的特征。eval函数使得make将再一次解析_text语句。eval返回空字符串,调用形式为:
$(eval _text)
1 .PHONY: all 2 sources =foo.o bar.c main.c hell.s 3 $(eval sources :=$(filter %.c %.s,$(sources))) 4 all: 5 @echo $(sources)
虽然它和上面第四个函数运行结果完全一样,但是在某些场合却必须用eval。可参考:http://bbs.chinaunix.net/thread-2321462-3-1.html
eval的二次展开,是递归的一种形式,因为有时候在Makefile的表达式中,最后得出来的可能还是Makefile的表达式而非真正我们想要传递的值,需要再展开Makefile的表达式得到最终的结果。
标签:nbsp src pattern lib log text 命名 path prefix
原文地址:http://www.cnblogs.com/yangguang-it/p/6752998.html