Makefile知识点-4------makefile的函数
来源:互联网 发布:济南哪家4g网络好 编辑:程序博客网 时间:2024/05/09 13:46
1、makefile里的函数
makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样
return = $(functionname arg1,arg2,arg3...)。
可能这里的'$'更像是从某个地址取值类似的操作。
2、 wildcard
使用:SRC = $(wildcard *.c ./foo/*.c)
搜索当前目录及./foo/下所有以.c结尾的文件,生成一个以空格间隔的文件名列表,并赋值给SRC.当前目录文件只有文件名,子目录下的文件名包含路径信息,比如./foor/bar.c。
3、notdir
使用:SRC = $(notdir wildcard)
去除所有的目录信息,SRC里的文件名列表将只有文件名。
4、patsubst
使用:OBJ = $(patsubst %.o %.c $(SRC))
patsubst是patten substitude的缩写,匹配替代的意思。这句是在SRC中找到所有.c 结尾的文件,然后把所有的.c换成.o。
5、foreach:
foreach是用来做循环用的,类似于for 语句,语法是:$(foreach <var>,<list>,<text> )
意思:把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行<text>所包含的表达式。每一次<text>会返回一个字符串,循环过程中,<text>的所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值。所以,<var>最好是一个变量名,<list>可以是一个表达式,而<text>中一般会使用<var>这个参数来依次枚举<list>中的单词。
例:
names := a b c d
files := $(foreach n,$(names),$(n).o)
$(name)中的单词会被挨个取出,并存到变量“n”中,“$(n).o”每次根据“$(n)”计算出一个值,这些值以空格分隔,最后作为foreach函数的返回,所以,$(files)的值是“a.o b.o c.o d.o”。
6、addprefix:
功能:$(addprefix <prefix>,<names...> ) ,加前缀函数,把前缀<prefix>加到<names>中的每个单词前。
返回:返回加过前缀的文件名序列。
例:$(addprefix src/,foo bar)返回值是“src/foo src/bar”。
举例说明:
在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件
建立一个简单的Makefile
src=$(wildcard *.c ./sub/*.c)
dir=$(notdir $(src))
obj=$(patsubst %.c,%.o,$(dir) )
all:
@echo $(src)
@echo $(dir)
@echo $(obj)
@echo "end"
执行结果分析:
第一行输出:
a.c b.c ./sub/sa.c ./sub/sb.c
wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。
第二行输出:
a.c b.c sa.c sb.c
notdir把展开的文件去除掉路径信息
第三行输出:
a.o b.o sa.o sb.o
- Makefile知识点-4------makefile的函数
- Makefile知识点
- makefile知识点
- makefile的函数
- Makefile的函数调用
- Makefile 的使用函数
- Makefile的常用函数
- Makefile的call函数
- Makefile的call函数
- makefile 使用的函数
- Makefile 的函数-1
- Makefile 的函数-1
- Makefile的call函数
- Makefile的origin 函数
- Makefile的函数addprefix
- 书写Makefile之Makefile的内置函数
- Makefile之------Makefile中常用的函数
- makefile(六):makefile的内置函数
- 关于Java中的动态多态
- Xcode imageNamed找图片插件
- 有限差分法求导
- SRM 494 DIV.1 总结
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- Makefile知识点-4------makefile的函数
- 静态编译sqlite3
- iptables防火墙打开某个端口
- Cocos2d-x 程序是如何开始运行与结束的
- 黑马程序员__正则表达式
- IAR 错误:xxx function has no prototype
- linux中history命令使用与配置
- 【rmzt】等待&&彩虹xp主题_7.23
- poj 3663 Costume Party