Makefile相关内容学习(二)

1.文件名操作函数
(1)取目录函数dir
格式: $(dir < names…>)
功能:从文件名序列中取出目录部分。目录部分是指最后一个反斜杠"/“之前的部分,如果没有反斜杠,则返回“./”
例如:
$(dir usr/src/linux-2.4/Makefile hello.c)
返回值为 |“usr/src/linux-2.4 ./”
(2)取文件名函数notdir
格式: $(notdir < names…>)
功能:从文件名序列< names>中取出非目录部分。非目录部分是指最后一个反斜杠”/“之后的部分,既文件名
例如:
$(notdir usr/src/linux-2.4/Makefile hello.c)
结果:
Makefile hello.c
(3)取后缀名函数suffix
格式: $(suffix < names…>)
功能:从文件名序列< names>中取出各个文件名的后缀名
返回:返回文件名序列< names>的后缀名序列,如果文件没有后缀名,则返回空字符串
例如:
$(suffix usr/src/linux-2.4/Makefile hello.c foo.s)
结果:” .c .s"(第一个为空字符)
(4)取前缀函数basename
格式: $(basename < names…>)
功能:从文件名序列< names>中取出各个文件名的前缀部分
返回:返回文件名序列< names>的前缀序列,如果文件没有前缀,则返回空字符串
例如:
$(basename usr/src/linux-2.4/kernel/exit.c hello.c home/hacks)
返回值为:“usr/src/linux-2.4/kernel/exit hello home/hacks”
(5)加后缀函数addsuffix
格式: $(addsuffix < suffix>,< names…>)
功能:将后缀< suffix>加到 < names>中的每个单词后面
返回:返回已加后缀的文件名序列
例如:
$(addsuffix .c,foo bar hello)
返回值:“foo.c bar.c hello.c”
(6)加前缀函数addprefix
格式: $(addprefix < prefix>,< names…>)
功能:把前缀< prefix>加到< names>中的每个单词前面
返回:返回加过前缀的文件名序列
例如:
$(addprefix usr/src/linux-2.4/kernel/,exit.c time.c)
结果:“usr/src/linux-2.4/kernel/exit.c usr/src/linux-2.4/kernel/time.c”
2.循环函数
foreach函数是用来做循环使用。
格式: $(foreach < var>,< list>,< text>)
功能:把参数< list>中的单词逐一取出放到参数< var>所指定的变量中,然后在执行< text>所包含的表达式
例如:
names := a b c d
files := $(foreach n, $(names), $(n).o)
结果: $(files)的值为"a.o b.o c.o d.o"
3.条件判断函数
(1)ifeq
格式:ifeq(< arg1>,< arg2>)
功能:比较参数arg1和arg2的值是否相等,相等时表达式为真
(2)ifneq
格式:ifneq(< arg1>,< arg2>)
功能:比较参数arg1和arg2的值是否相等,不相等时表达式为真
(3)ifdef
格式:ifdef< variable-name>
功能:如果变量< variable-name>的值非空,则表达式为真。< variable-name>可以是一个函数的返回值。ifdef只是测试一个变量是否有值,其并不会把变量扩展到当前位置
(4)ifndef
格式:ifndef< variable-name>
功能:如果变量< variable-name>的值为空,则表达式为真
(5)if
格式: $(if< condition>,< then-part>)
或者 $(if < condition>,< then-part>,< else-part>)
功能:< condition>参数是if的表达式,如果其返回的为非空字符串,那么这个表达式就相当于返回真,于是,< then-part>会被计算,否则< else-part>会被计算。
返回值:如果< condition>为真,那么< then-part>就是整个函数的返回值,否者< else-part>会是整个函数的返回值,若< else-part>没有被定义,整个函数返回空字符串。
4.模式规则
模式规则与一般的规则类似,只是在模式规则中,目标的定义需要有"%“字符
例如:
%.o:%.c;< commmand…>
表示所有的.c文件生成相应的.o文件的规则。如果要生成的目标是"a.o b.o”,那么“%.c”就是"a.c b.c"

你可能感兴趣的:(makefile,makefile)