Makefile知识点-4------makefile的函数 我就是我 2021-12-22 13:47 280阅读 0赞 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
还没有评论,来说两句吧...