strip函数:$(strip text)

函数功能:去除字符串空格函数

 示例:

STR =        a    b c      
LOSTR = $(strip $(STR)) 
#结果是“a b c”。

-------------------------------------------------------------------------------------------------------------------------------------------

eval函数: $(eval text)
函数功能: 它的意思是 text 的内容将作为makefile的一部分而被make解析和执行。

 示例:

比如这样一个makefile:
$(eval xd:xd.c a.c)
将会产生一个这样的编译
cc   xd.c a.c -o xd

这样一个makefile:
define MA
aa:aa.c
 gcc  -g -o aa aa.c
endef
$(eval $(call MA) )
会产生一个这样的编译:
gcc -g -o aa aa.c

-------------------------------------------------------------------------------------------------------------------------------------------

filter函数: $(filter PATTERN…,TEXT)

函数功能:过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词

示例: 

sources := foo.c bar.c baz.s ugh.h 
foo: $(sources) 
cc $(filter %.c %.s,$(sources)) -o foo  
函数返回
值为“foo.c bar.c baz.s

-------------------------------------------------------------------------------------------------------------------------------------------

if函数: $(if <condition>,<then-part>,<else-part> )
函数功能:类似c语言的三目运算a>b?true:false;此函数如果condition非空返回then-part,condition为空返回else-part

示例:

SRC_DIR := src

#if函数---设置默认值
#如果变量SRC_DIR的值不为空,则将SRC_DIR指定的目录作为SUBDIR子目录;否则将/home/src作为子目录
SUBDIR += $(if $(SRC_DIR) $(SRC_DIR),/home/src)

all:
    @echo $(SUBDIR)

-------------------------------------------------------------------------------------------------------------------------------------------

 patsubst函数:$(patsubst <pattern>,<replacement>,<text>)

函数功能:查找text中的单词,如果匹配pattern,那么就用replacement的内容替换

示例:

$(patsubst %.c,%.o,jello1.c jello2.c)

#那么将会替换成jello1.o jello2.o

-------------------------------------------------------------------------------------------------------------------------------------------

 filter-out函数:$(filter-out PATTERN…,TEXT)

函数功能:反过滤函数—filter-out,过滤满足PATTERN的字符串

示例:

objects=main1.o foo.o main2.o bar.o 
mains=main1.o main2.o 

$(filter-out $(mains),$(objects)) 
#结果:它的返回值为“foo.o bar.o”

------------------------------------------------------------------------------------------------------------------------------------------- 

call函数: $(call <expression>;,<parm1>;,<parm2>;,<parm3>;...)

函数功能:call函数是唯一一个可以用来创建新的参数化的函数。你可以写一个非常复杂的表达式,这个表达式中,你可以定义许多参数,然后你可以用call函数来向这个表达式传递参数。

示例:

reverse =  $(1) $(2)

foo = $(call reverse,a,b)

那么,foo的值就是“a b”。当然,参数的次序是可以自定义的,不一定是顺序的,如:

reverse =  $(2) $(1)

-------------------------------------------------------------------------------------------------------------------------------------------  

foreach函数:$(foreach <var>,<list>,<cmd>)

 函数功能:用var便利list,并且cmd执行操作

示例:

names := a b c d

files := $(foreach n,$(names),$(n).o)

#结果:$(files)的值是“a.o b.o c.o d.o”。

-------------------------------------------------------------------------------------------------------------------------------------------

wildcard函数 $(wildcard PATTERN...) 

 函数功能:显示指定路径下指定文件类型PATTERN的所有文件(以相对路径显示)

示例:

src=$(wildcard *.c ./sub/*.c)
all:
 @echo $(src)

#输出:
# a.c b.c ./sub/sa.c ./sub/sb.c

-------------------------------------------------------------------------------------------------------------------------------------------

notdir函数 $(notdir PATTERN...) 

 函数功能:显示文件列表的全部文件名

示例:

src=$(wildcard *.c ./sub/*.c)
dir=$(notdir $(src))

all:
 @echo $(src)
 @echo $(dir)

执行结果分析:
第一行输出:
 a.c b.c ./sub/sa.c ./sub/sb.c
 wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。

  第二行输出:
  a.c b.c sa.c sb.c
  notdir把展开的文件去除掉路径信息

-------------------------------------------------------------------------------------------------------------------------------------------

addprefix函数: $(addprefix <prefix>, <name1 name2 ...>)

 

 函数功能:把<prefix>加到name序列中的每一个元素前面,添加前缀

示例:

result = $(addprefix %., c cpp)
test:
    @echo $(result)

#输出:%.c %.cpp

-------------------------------------------------------------------------------------------------------------------------------------------

addsuffix函数: $(addsuffix <prefix>, <name1 name2 ...>)

 函数功能:把<prefix>加到name序列中的每一个元素后面,添加后缀

示例:

result = $(addsuffix .%, c cpp)
test:
    @echo $(result)

#输出:c.% cpp.%

-------------------------------------------------------------------------------------------------------------------------------------------

foreach函数:  $(foreach var text commond)

 函数功能:循环处理文件列表。

示例:

src := 1.c 2.c. 3.c 4.c

all:
        @echo  $(foreach n,$(src), \
            $(n) \
         $(n) \
        )
#输出结果:1.c 1.c 2.c. 2.c. 3.c 3.c 4.c 4.c

 

 

 
 
 
posted on 2021-04-08 10:29  ღ惟吾德馨ღ  阅读(108)  评论(0)    收藏  举报