Makefile学习(二)
参看文档:《跟我一起写 Makefile》
Makefile中常用的自动化变量:
- $@:表示规则中的目标文件名。
- $<:表示规则中的第一个依赖文件名。
- $^:表示规则中的所有依赖文件列表,以空格分隔并去重。
- $?:表示规则中所有比目标文件更新的依赖文件列表。
- $*:表示不包括扩展名的目标文件名。
- $(@D):表示目标文件所在的目录。
- $(@F):表示目标文件的文件名部分。
- $(<d):表示第一个依赖文件所在的目录。< li="">
- $(<f):表示第一个依赖文件的文件名部分。< li="">
Makefile常用函数:
1、函数 subst
函数 subst 用来完成字符串替换,调用形式如下:
$(subst ,,)
此函数的功能是将字符串中的内容替换为,函数返回被替换以后的字符串,比如如下示例:
$(subst lethe,LETHE,my name is lethe)
把字符串“my name is lethe”中的“lethe”替换为“LETHE”,替换完成以后的字符串为“my name is LETHE”。
2、函数 patsubst
函数 patsubst 用来完成模式字符串替换,使用方法如下:
$(patsubst ,,)
此函数查找字符串中的单词是否符合模式,如果匹配就用来替换掉,可以使用通配符“%”,表示任意长度的字符串,函数返回值就是替换后的字
符串。如果中也包涵“%”,那么中的“%”将是中的那个“%”所代表的字符串,比如:
$(patsubst %.c,%.o,a.c b.c c.c)
将字符串“a.c b.c c.c”中的所有符合“%.c”的字符串,替换为“%.o”,替换完成以后的字符串为“a.o b.o c.o”。
3、函数 dir
函数 dir 用来获取目录,使用方法如下:
$(dir <names…>)
此函数用来从文件名序列中提取出目录部分,返回值是文件名序列的目录部分,比如:
$(dir )
提取文件“/src/a.c”的目录部分,也就是“/src”。
4、函数 notdir
函数 notdir 看名字就是知道去除文件中的目录部分,也就是提取文件名,用法如下:
$(notdir <names…>)
此函数用与从文件名序列中提取出文件名非目录部分,比如:
$(notdir )
提取文件“/src/a.c”中的非目录部分,也就是文件名“a.c”。
5、函数 foreach
foreach 函数用来完成循环,用法如下:
$(foreach , ,)
此函数的意思就是把参数中的单词逐一取出来放到参数中,然后再执行所包含的表达式。每次都会返回一个字符串,循环的过程中,中所包含的每个字符串会以空格隔开,最后当整个循环结束时,所返回的每个字符串所组成的整个字符串将会是函数 foreach 函数的返回值。
6、函数 wildcard
通配符“%”只能用在规则中,只有在规则中它才会展开,如果在变量定义和函数使用时,
通配符不会自动展开,这个时候就要用到函数 wildcard,使用方法如下:
$(wildcard PATTERN…)
比如:
$(wildcard *.c)
上面的代码是用来获取当前目录下所有的.c 文件,类似“%”。