三、文件名操作函数
-
取目录函数- dir
- $(dir <names…> )
- 功能:从文件名序列<names>中取出目录部分。目录部分是指最后一个反斜杠“ / ” 之前的部分.如果没有反斜杠,那么返回 “ ./ ”
- 返回:返回文件名序列<names>的目录部分
- 例子
# 返回值是 “ src/ ./ ”
$(dir src/foo.c hacks )
-
取文件函数- notdir
- $( notdir <names…> )
- 功能:从文件名序列<names>中取出非目录部分,非目录部分是指最后一个反斜杠“ / ”之后的部分
- 返回:返回文件名序列<names> 的非目录部分
- 例子:
# 返回值 “ foo.c hacks ”
$(notdir src/foo.c hacks)
-
取后缀函数- suffix
- $( suffix <names…> )
- 功能:从文件名序列<names>中取出各个文件名的后缀
- 返回:返回文件名序列<names>的后缀序列,如果文件没有后缀,则返回空字符串
- 例子
# 返回值是“ .c .c ”
$(suffix src/foo.c src-1.0/bar.c hacks)
-
取前缀函数- basename
- $( basename <names…> )
- 功能:从文件名序列<names>的前缀序列,如果文件没有前缀,则返回空字符串
- 例子
# 返回值是 “ src/foo src-1.0/bar hacks ”
$(basename src/foo.c src-1.0/bar.c hacks)
-
加后缀函数- addsuffix
- $( addsuffix <suffix>,<names…> )
- 功能:把后缀<suffix>加到<names>中的每个单词后面
- 返回:返回加过后缀的文件名序列
- 例子:
# 返回值是“ foo.c bar.c ”
$( addsuffix .c,foo bar )
-
加前缀函数- addprefix
- $( addprefix <prefix>,<names…> )
- 功能: 把前缀<prefix>加到<names>中的每个单词后面
- 返回:返回加过前缀的文件名序列
- 例子:
# 返回值是“ src/foo src/bar ”
$( addprefix src/,foo bar )
-
连接函数- join
- $( join <list1>,<list2> )
- 功能:把<list2>中的单词对应地加到<list1>的单词后面,
如果<list1>的单词个数要比<list2>的多,那么,<list1>中多出来的单词要保持原样。
如果<list2>的单词个数要比<list1>的多,那么,<list2>多出来的单词将被复制到<list2>中 - 返回:返回连接过后的字符串
- 例子:
# 返回值是 “ aaa111 bbb222 333 ”
$( join aaa bbb, 111 222 333 )
四、foreach函数
-
forreach 函数
- $( foreach <var>,<list>,<text> )
- 功能:foreach 函数用来做循环用
- 描述:把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,
然后再执行<text>所包含的表达式
每一次<text>会返回一个字符串,循环过程中,<text>的所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符串(以空格分隔)将会是 foreach 函数的返回值
<var>最后是一个变量名
#<var>是一个临时变量,作用域在foreach函数内
<list>可以是一个表达式
<text>中一般会使用<var>
# 返回值为 “ a.o b.o c.o d.o ”
names := a b c d
files := $(foreach n,$(names),$(n).o)
# 将names变量的值逐个放入 n变量中,
# $(n).o 根据每次的n变量的值给其添加后缀.o