Makefile常用函数整理

来源:互联网 发布:银行网络应急预案 编辑:程序博客网 时间:2024/05/16 07:56

http://blog.csdn.net/ustc_dylan/article/details/6963248

对上篇文章的函数进行了整理

函数名

函数

功能

例子

subst

$(subst <from>,<to>,<text> )

把字串<text>中的<from>字符串替换成<to>

$(subst ee,EE,feet on the street)
返回结果是“fEEtonthestrEEt”

patsubst

$(patsubst <pattern>,<replacement>,<text> )

查找<text>中的单词(以空格等分隔)是否 
符合模式<pattern>,如果匹配的话,则以<replacement>替换。

$(patsubst %.c,%.o,x.c.c bar.c)

返回结果是“x.c.obar.o”

strip

$(strip <string> )

去掉<string>字串中开头和结尾的空字符

$(strip a b c )

结果是“abc”

findstring

$(findstring <find>,<in> )

在字串<in>中查找<find>字串。 

$(findstring a,a b c) 
第一个函数返回“a”字符串

filter

$(filter <pattern...>,<text> )

<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词。可 
以有多个模式。 

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

 

filter-out

$(filter-out <pattern...>,<text> )

<pattern>模式过滤<text>字符串中的单词,去除符合模式<pattern>的单词。

objects=main1.o foo.o main2.o bar.o 
mains=main1.o main2.o
$(filter-out $(mains),$(objects))
返回值是“foo.o bar.o”

sort

$(sort <list> )

给字符串<list>中的单词排序(升序)。

注:sort函数会去掉<list>中相同的单词。 

word

$(word <n>,<text> )

取字符串<text>中第<n>个单词。

$(word 2,foobarbaz)返回值是“bar”

wordlist

$(wordlist <s>,<e>,<text> )

从字符串<text>中取从<s>开始到<e>的单词串。<s><e>是一个数字。 

$(wordlist 2,3,foobarbaz)返回值是“barbaz”

words

$(words <text> )

统计<text>中字符串中的单词个数

注:如果我们要取<text>中最后的一个单词,我们可以这样:$(word $(words 
<text> ),<text> )

firstword

$(firstword <text> )

取字符串<text>中的第一个单词。

 

dir

$(dir <names...> )

从文件名序列<names>中取出目录部分。目录部分是指最后一个反斜杠(“/” 
之前的部分。如果没有反斜杠,那么返回“./”

$(dir src/foo.chacks)

返回值是“src/./”

notdir

$(notdir <names...> )

从文件名序列<names>中取出非目录部分。非目录部分是指最后一个反斜杠(“/ 
)之后的部分。 

$(notdir src/foo.c hacks)

返回值是“foo.c hacks”

suffix

$(suffix <names...> )

从文件名序列<names>中取出各个文件名的后缀。

$(suffix src/foo.c src-1.0/bar.c hacks)

返回值是“.c.c”

basename

$(basename <names...> )

从文件名序列<names>中取出各个文件名的前缀部分。 

$(basename src/foo.c src-1.0/bar.c hacks)

返回值是“src/foo src-1.0/bar hacks”

addsuffix

$(addsuffix <suffix>,<names...> )

把后缀<suffix>加到<names>中的每个单词后面。 

$(addsuffix .c,foo bar)返回值是“foo.cbar.c” 

addprefix

$(addprefix <prefix>,<names...> )

把前缀<prefix>加到<names>中的每个单词后面。

$(addprefix src/,foo bar)返回值是“src/foo src/bar”

join

$(join <list1>,<list2> )

<list2>中的单词对应地加到<list1>的单词后面。如果<list1>的单词个数要比 
<list2>
的多,那么,<list1>中的多出来的单词将保持原样。如果<list2>的单词个数要比 <list1>多,那么,<list2>多出来的单词将被复制到<list2>中。 
返回:返回连接过后的字符串。 

$(join aaa bbb,111 222 333)返回值是“aaa111 bbb222 333”

foreach

$(foreach <var>,<list>,<text> )

把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行<text>所包含的表达式

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”

if

$(if <condition>,<then-part> )或或$(if <condition>,<then-part>,<else-part> )

如果<condition>为真(非空字符串),那个<then-part>会是整 个函数的返回值,否则,那么<else-part>会是整个函数的 返回值,此时如果<else-part>没有被定义,那么,整个函数返回空字串。 

 

call

$(call <expression>,<parm1>,<parm2>,<parm3>...)

 

reverse = $(2) $(1)
foo = $(call reverse,a,b)
此时的foo的值就是“ba”

origin

$(origin <variable> )

告诉你这个变量是哪里 来的

返回值:

“undefined”:表示<variable>从来没有定义过

“default”:表示<variable>是一个默认的定义

“environment” :表示<variable>是一个环境变量

“file”:表示<variable>这个变量被定义在Makefile中。

command line”:表示<variable>这个变量是被命令行定义的

override”:表示<variable>是被override指示符重新定义的。

automatic” :表示<variable>是一个命令运行中的自动化变量。

shell

参数应该就是Shell的命令

把执行操作系统命令后的输出作为函数返回

 


0 0