zoukankan      html  css  js  c++  java
  • makefile函数

    1、findstring

    调用形式:$(findstring FIND, IN)
    函数功能:搜索字串“IN”,查找“FIND”字串。
    返回值  :如果在“IN”之中存在“FIND”,则返回“FIND”,否则返回空。
    函数说明:字串“IN”之中可以包含空格、[Tab]。搜索需要是严格的文本匹配。
    例子: $(findstring a, a b c) 返回a $(findstring a, b c) 返回空

    2、subst

    调用形式:$(subst from,to,TEXT)
    函数功能:把字串“TEXT”中的“FROM”字符替换为“TO”。
    返回值 :替换后的新字符串。
    
    例子:
    $(subst EE, ee, street)   返回strEEt

    3、filter

    调用形式:$(filter PATTERN, TEXT)
    函数功能:过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词,保留所有符合此模式的单词。可以使用多个模式。模式中一般需要包含模式字符“%”。存在多个模式时,模式表达式之间使用空格分割。
    返回值 :空格分割的“TEXT”字串中所有符合模式“PATTERN”的字串。
    函数说明:“filter”函数可以用来去除一个变量中的某些字符串。
    
    例子:
    $(filter %.c %.cpp,a.c b.cpp c.h) 返回a.c b.cpp

    4、filter-out

    调用形式:$(filter-out PATTERN,TEXT)
    函数功能:和“filter”函数实现的功能相反。过滤掉字串“TEXT”中所有符合模式“PATTERN”的单词,保留所有不符合此模式的单词。可以有多个模式。存在多个模式时,模式表达式之间使用空格分割。
    返回值:空格分割的“TEXT”字串中所有不符合模式“PATTERN”的字串。
    函数说明:“filter-out”函数也可以用来去除一个变量中的某些字符串,(实现和“filter”函数相反)。
    
    例子:
    $(filter-out %.c %.cpp,a.c b.cpp c.h) 返回 c.h

    5、shell

    调用形式:$(shell CMD)
    函数功能:函数“shell”所实现的功能和shell中的引用(``)相同。实现了命令的扩展。意味着需要一个shell命令作为它的参数,而返回的结果是此命令在shell中的执行结果。make仅仅对它的返回结果进行处理;make将函数的返回结果中的所有换行符(“
    ”)或者一对“
    
    ”替换为单空格;并去掉末尾的回车符号(“
    ”)或者“
    
    ”。函数展开式时,它所调用的命令(它的参数)得到执
    行。除了对它的引用出现在规则的命令行中和递归的变量定义引用以外,其它决大多数情况下,make在读取Makefile时函数shell就被扩展。
    返回值 :函数“shell”的参数在shell中的执行结果。
    函数说明:函数本身的返回值是其参数的执行结果,没有进行任何处理。对结果的处理是由make进行的。当对函数的引用出现在规则的命令行中,命令行在执行时函数引用才被展开。展开过程函数参数的执行时在另外一个shell进程中完成的,因此对于出现在规则命令行的多级“shell”函数引用需要谨慎处理,否则会影响效率(每一级的“shell”函数的参数都会有各自的shell进程)。
    
    例子:
    a.dat有两行分别为hello和world
    $(shell cat a.dat) 返回 hello world 会把换行替换成空格

    6、foreach

    调用形式:$(foreach VAR,LIST,TEXT)
    函数功能:首先展开变量“VAR”和“LIST”;而表达式“TEXT”中的变量引用不被展开。执行时把“LIST”中使用空格分割的单词依次取出赋值给变量“VAR”,然后执行“TEXT”表达式。重复直到“LIST”的最后一个单词(为空时结束)。“TEXT”中的变量或者函数引用在执行时才被展开,因此如果在“TEXT”中存在对“VAR”的引用,那么“VAR”的值在每一次展开式将会到的不同的值。
    返回值:空格分割的多次表达式“TEXT”的计算的结果。
    函数说明:foreach就是遍历LIST中的值一个一个赋给VAR,然后利用VAR调用TEXT表达式。
    
    例子:
    name = a b c d
    $(foreach n,$(name),$(n).o) 输出 a.o b.o c.o d.o
    foreach中的n参数是一个临时的局部变量,foreach函数执行完后,参数的变量将不在作用,其作用域只在foreach函数当中

    7、dir

    调用形式:$(dir filePaths)
    函数功能:从文件名序列“NAMES…”中取出各个文件名目录部分。文件名的目录部分就是包含在文件名中的最后一个斜线(“/”)(包括斜线)之前的部分。
    返回值 :空格分割的文件名序列“NAMES…”中每一个文件的目录部分。
    函数说明:如果文件名中没有斜线,认为此文件为当前目录(“./”)下的文件。
    
    例子:
    $(dir /home/script/run.py test.py) 返回 /home/script/  ./

    8、notdir

    调用形式:$(notdir filePaths)
    函数功能:从文件名序列“NAMES…”中取出非目录部分。目录部分是指最后一个斜线(“/”)(包括斜线)之前的部分。删除所有文件名中的目录部分,只保留非目录部分。
    返回值 :文件名序列“NAMES…”中每一个文件的非目录部分。
    函数说明:如果“NAMES…”中存在不包含斜线的文件名,则不改变这个文件名。以反斜线结尾的文件名,是用空串代替,因此当“NAMES…”中存在多个这样的文件名时,返回结果中分割各个文件名的空格数目将不确定!这是此函数的一个缺陷。
    
    例子:
    $(notdir /home/script/run.py test.py /home/) 返回run.py test.py 空格

    9、patsubst

    调用形式:$(patsubst PATTERN,REPLACEMENT,TEXT)
    函数功能:搜索“TEXT”中以空格分开的单词,将否符合模式“TATTERN”替换为“REPLACEMENT”。参数“PATTERN”中可以使用模式通配符“%”来代表一个单词中的若干字符。如果参数“REPLACEMENT”中也包含一个“%”,那么“REPLACEMENT”中的“%”将是“TATTERN”中的那个“%”所代表的字符串。在“TATTERN”和“REPLACEMENT”中,只有第一个“%”被作为模式字符来处理,后续的作为字符本上来处理。在两个参数中当使用第一个“%”本是字符本身时,可使用反斜杠“”对它进行转义处理。
    返回值 :替换后的新字符串。
    函数说明:参数“TEXT”单词之间的多个空格在处理时被合并为一个空格,但前导和结尾空格忽略。
    
    例子:
    $(patsubst %.c,%.o,x.c.c bar.c) 输出 x.c.o bar.o
    
     objects = foo.o bar.o baz.o,
     $(objects:.o=.c)和$(patsubst %.o,%.c,$(objects))是一样的。

    10、strip

    调用形式:$(strip STRING)
    函数功能:去掉字串(若干单词,使用若干空字符分割)“STRING”开头和结尾的空字符,并将其中多个连续空字符合并为一个空字符。
    返回值 :无前导和结尾空字符、使用单一空格分割的多单词字符串。
    函数说明:空字符包括空格、[Tab]等不可显示字符。
    
    例子:
    empty :=
    space := $empty $empty str = $space a b c $empty $(strip $(str)) 返回a b c,去除开头和末尾的空格,且把bc之间的两个空格去除了一个。

    11、sort

    调用形式:$(sort LIST)
    函数功能:给字串“LIST”中的单词以首字母为准进行排序(升序),并取掉重复的单词。
    返回值:空格分割的没有重复单词的字串。
    函数说明:两个功能,排序和去字串中的重复单词。可以单独使用其中一个功能。
    
    例子:
    $(sort hello world hello a b) 返回a b hello world

    12、word

    调用形式:$(word N,TEXT)
    函数功能:取字串“TEXT”中第“N”个单词(“N”的值从1开始)。
    返回值 :返回字串“TEXT”中第“N”个单词。
    函数说明:如果“N”值大于字串“TEXT”中单词的数目,返回空字符串。如果“N”为0,出错!
    
    例子:
    $(word 1,today is a new day) 返回today

    13、wordlist

    调用形式:$(wordlist S,E,TEXT)
    函数功能:从字串“TEXT”中取出从“S”开始到“E”的单词串。“S”和“E”表示单词在字串中位置的数字。
    返回值 :字串“TEXT”中从第“S”到“E”(包括“E”)的单词字串。
    函数说明:“S”和“E”都是从1开始的数字。当“S”比“TEXT”中的字数大时,返回空。如果“E”大于“TEXT”字数,返回从“S”开始,到“TEXT”结束的单词串。如果“S”大于“E”,返回空。
    
    例子:
    $(wordlist 1,2,today is a new day) 返回today is

    14、words

    调用形式:$(words TEXT)
    函数功能:字算字串“TEXT”中单词的数目。
    返回值:“TEXT”字串中的单词数。
    
    例子:
    $(words today is a new day) 返回5

    15、firstword

    调用形式:$(firstword TEXT)
    函数功能:取字串“TEXT”中的第一个单词。
    返回值 :字串“TEXT”的第一个单词。
    函数说明:“TEXT”被认为是使用空格分割的多个单词(名字)的序列。函数忽略“TEXT”中除第一个单词以外的所有的单词。
    
    例子:
    $(firstword today is a new day) 返回today 与$(wrod 1,TEXT)功能相同

    16、suffix

    调用形式:$(suffix NAMES)
    函数功能:从文件名序列“NAMES…”中取出各个文件名的后缀。后缀是文件名中最后一个以点“.”开始的(包含点号)部分,如果文件名中不包含一个点号,则为空。
    返回值:以空格分割的文件名序列“NAMES…”中每一个文件的后缀序列。
    函数说明:“NAMES…”是多个文件名时,返回值是多个以空格分割的单词序列。如果文件名没有后缀部分,则返回空。
    
    例子:
    $(suffix /home/scirpt/run.py test.py make)返回.py .py

    17、basename

    调用形式:$(basename NAMES)
    函数功能:从文件名序列“NAMES…”中取出各个文件名的前缀部分(点号之后的部分)。前缀部分指的是文件名中最后一个点号之前的部分。
    返回值:空格分割的文件名序列“NAMES…”中各个文件的前缀序列。如果文件没有前缀,则返回空字串。
    函数说明:如果“NAMES…”中包含没有后缀的文件名,此文件名不改变。如果一个文件名中存在多个点号,则返回值为此文件名的最后一个点号之前的文件名部分。
    
    例子:
    $(basename /home/script/run.py test.py make)返回/home/script/run test make

    18、addsuffix

    调用形式:$(addsuffix SUFFIX, NAMES)
    函数功能:为“NAMES…”中的每一个文件名添加后缀“SUFFIX”。参数“NAMES…”为空格分割的文件名序列,将“SUFFIX”追加到此序列的每一个文件名的末尾。
    返回值:以单空格分割的添加了后缀“SUFFIX”的文件名序列。
    
    例子:
    $(addsuffix .o, a b c)返回 a.o b.o c.o

    19、addprefix

    调用形式:$(addprefix PREFIX,NAMES)
    函数功能:为“NAMES…”中的每一个文件名添加前缀“PREFIX”。参数“NAMES…”是空格分割的文件名序列,将“SUFFIX”添加到此序列的每一个文件名之前。
    返回值:以单空格分割的添加了前缀“PREFIX”的文件名序列
    
    例子:
    $(addprefix mon_,input output) 返回mon_input mon_output

    20、join

    调用形式:$(join LIST1,LIST2)
    函数功能:将字串“LIST1”和字串“LIST2”各单词进行对应连接。就是将“LIST2”中的第一个单词追加“LIST1”第一个单词字后合并为一个单词;将“LIST2”中的第二个单词追加到“LIST1”的第一个单词之后并合并为一个单词,……依次列推。
    返回值:单空格分割的合并后的字(文件名)序列。
    函数说明:如果“LIST1”和“LIST2”中的字数目不一致时,两者中多余部分将被作为返回序列的一部分。
    
    例子:
    $(join 111 222 333,aaa bbb) 返回111aaa 222bbb 333

    21、wildcard

    调用形式:$(wildcard PATTERN)
    函数功能:列出当前目录下所有符合模式“PATTERN”格式的文件名。
    返回值:空格分割的、存在当前目录下的所有符合模式“PATTERN”的文件名。
    函数说明:“PATTERN”使用shell可识别的通配符,包括“?”(单字符)、“*”(多字符)等。
    
    
    例子:
    home目录下有a.c b.c c.h
    $(wildcard /home/*.c) 返回a.c b.c

    22、info

    调用形式:$(info TEXT…)
    函数功能:打印“TEXT…”
    返回值 :空字符
    函数说明:用法和“error”类似,展开过程相同。
    
    例子:
    $(info hello world) 输出hello world
    $(info $(shell printf "03];Terminal_name07")) 设置Terminal的名字,将shell返回的字符输出,而不成为命令

    23、warning

    调用形式:$(warning TEXT…)
    函数功能:函数“warning”类似于函数“error”,区别在于它不会导致致命错误(make不退出),而只是提示“TEXT…”,make的执行过程继续。
    返回值 :空字符
    函数说明:用法和“error”类似,展开过程相同。
    
    例子:
    $(warning hello world) 输出hello world

    24、error

    调用形式:$(error TEXT…)
    函数功能:产生致命错误,并提示“TEXT…”信息给用户,之后退出make的执行。需要说明的是:“error”函数是在函数展开式(函数被调用时)才提示信息并结束make进程。因此如果函数出现在命令中或者一个递归的变量定义中时,在读取Makefile时不会出现错误。而只有包含“error”函数引用的命令被执行,或者定义中引用此函数的递归变量被展开时,才会提示致命信息“TEXT…”同时make退出执行。
    返回值 :空字符
    函数说明:“error”函数一般不出现在直接展开式的变量定义中,否则在make读取Makefile时将会提示致命错误。
    
    例子:
    $(error occur a error) 输出occur a error 并退出makefile

    x

  • 相关阅读:
    关于线程的执行顺序
    常用正则表达式
    @JsonFormat与@DateTimeFormat注解的使用
    Mybatis中 #{} 和 ${} 的区别!
    [Redis]Spring Boot 中 Redis 的使用
    [WebSocket长连接]SpringBoot2.0集成WebSocket,实现后台向前端推送信息
    [springboot] 搭建项目及单元测试
    [AOP拦截 ]SpringBoot+Quartz Aop拦截Job类中的方法
    [vue折线图] 记录SpringBoot+Vue3.0折线图订单信息展示
    SpringBoot解决cors跨域问题
  • 原文地址:https://www.cnblogs.com/yuandonghua/p/11941295.html
Copyright © 2011-2022 走看看