zoukankan      html  css  js  c++  java
  • Makefile中的函数

    1.strip函数

    (1)语法:
    $(strip string)
    (2)说明:
    strip是去空格函数
    (3)举例:

    #名称:去空格函数——strip。
    #功能:去掉<string>字串中开头和结尾的空字符,并将中间的多个连续空字符(如果有的话)合并为一个空字符。
    #返回:返回被去掉空格的字符串值。
    #说明: 空字符包括空格,tab等不可显示的字符
    #把字串" abc"开头的空格去掉,结果是"abc"。
    str1 :=    abc
    str2 := abc      
    str3 := a   b  c      
    
    all:
        @echo bound$(strip $(str1))bound
        @echo bound$(strip $(str2))bound
        @echo bound$(strip $(str3))bound
    
    执行结果:
    root@ubuntu# make
    boundabcbound
    boundabcbound
    bounda b cbound

    2.call函数

    (1)语法:
    $(call <expression>,<parm1>,<parm2>,<parm3>...)
    (2)说明:
    call函数是唯一一个可以用来创建新的参数化的函数。你可以写一个非常复杂的表达式,这个表达式中,你可以定义许多参数,
    然后你可以用call函数来向这个表达式传递参数。
    (3)举例
    例子1:反转参数的次序

    reverse=$(2) $(1)
    foo=$(call reverse, a, b)
    all:
        @echo $(foo)
    #执行结果:
    #root@ubuntu# make
    #b a

    例子2:使用模板语句

    define target
        echo $1
        echo $2
    endef
    
    all:
        @$(call target, hello, world)
    
    root@ubuntu# make
    hello
    world

    3.foreach函数

    (1)语法:
    $(foreach <var>,<list>,<text>)
    (2)说明:
    函数工作过程:如果需要(存在变量或者函数的引用),首先展开变量<var>和<list>的引用;而表达式<text>中的变量引用不展开。
    执行时把<list>中使用空格分割的单词依次取出赋值给变量<var>,然后执行<text>表达式。重复直到<list>的最后一个单词。
    <text>中的变量或者函数引用在执行时才被展开,但是如果在<text>中存在对<var>的引用,那么<text>的值在每一次展开式将会到的不同的值。
    返回值为空格分割的多次表达式<text>的计算的结果。
    (3)举例

    names := a b c d
    files := $(foreach n, $(names), $(n).o)
    all:
        @echo $(files)
    
    root@ubuntu# make
    na.o b.o c.o d.o

    4.sort函数
    (1)语法:
    $(sort <list>) 
    (2)说明:
    排序函数,给字串<list>中的单词以首字母为准进行排序(升序),并去掉重复。
    (3)举例:

    val := $(sort foo bar lose foo) 
    all:
        @echo $(val) 
    
    root@ubuntu# make
    bar foo lose  

    5.subst函数
    (1)语法:
    $(subst <str1>,<str2>,$(str3))
    (2)说明:
    将字符串str3中的str1字段替换为str2.
    (3)举例:将$(foo)中的空格替换为逗号。

    comma := ,
    empty := 
    space := $(empty) $(empty) #使用两个empty定义中间的那个空格
    foo := a b c
    bar := $(subst $(space),$(comma),$(foo))
    all:
        @echo $(bar)
    
    str := $(subst ee,EE,feet on the street)
    all1:
        @echo $(str)
    
    root@ubuntu# make
    a,b,c
    root@ubuntu# make all1
    fEEt on the strEEt,

    6.patsubst函数
    (1)语法:
    $(patsubst <pattern>,<replacement>,<text>)
    (2)说明:
    模式替换函数,将<text>中符合<pattern>的字符串替换为<replacement>。注意<pattern>可以包括通配符“%”,表示任意长度的字串。如果<replacement>中也包含“%”,
    那么,<replacement>中的这个“%”将是<pattern>中的那个“%”所代表的字串。(可以用“”来转义,以“\%”来表示真实含义的“%”字符),函数返回被替换过后的字符串。
    (3)举例:

    all:
        @ echo $(patsubst %.c, %.o, x.c.c bar.c)
    
    root@ubuntu# make
    x.c.o bar.o

    7.findstring函数
    (1)语法:
    #$(findstring <str1>, <str2>)
    (2)说明:
    查找字符串函数,在str2中找str1,如果找到就返回str1,没有找到就返回空字符串。
    (3)举例:

    str1 := a b c
    str2 := b c
    all:
        @echo $(findstring a,$(str1))
        @echo $(findstring a,$(str2))
    
    root@ubuntu# make
    a
     

    8.filter函数
    (1)语法:
    $(filter <parten…>,<text>) 
    (2)说明:
    过滤函数,将字串<text>中所有不符合模式<parten…>的单词过滤掉,只保留所有符合此模式的单词。
    (3)举例:

    sources := foo.c bar.c baz.s ugh.h
    all:
        @echo $(filter %.c %.s,$(sources))
    
    root@ubuntu# make
    foo.c bar.c baz.s

    9.filter-out函数
    (1)语法:
    $(filter-out <pattern…>,<text>)
    (2)说明:
    过滤函数,将字串<text>中所有符合模式<parten…>的单词过滤掉,只保留不符合此模式的单词,于filter是相反的操作。
    (3)举例:

    objects := main1.o foo.o main2.o bar.o
    mains   := main1.o main2.o
    all:
        @echo $(filter-out $(mains),$(objects))
    
    root@ubuntu# make
    foo.o bar.o

    10.wildcard函数
    (1)语法:
    $(wildcard <pattern...>)
    (2)说明:
    该函数被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。
    (3)举例:

    all:
        @echo $(wildcard *.c)
    
    root@ubuntu# touch a.c bb.c
    root@ubuntu# make
    bb.c a.c

    参考:https://blog.csdn.net/qxb1229/article/details/8651060 TODO还有很多没写完。

  • 相关阅读:
    CentOS7.4部署Python3+Django+uWSGI+Nginx
    测试:ATM
    JDBC_增删改
    HTTP请求状态码
    Servlet2
    Java日期时间3
    Servlet1
    安装Tomcat
    Java日期时间2
    广度优先遍历
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/12833854.html
Copyright © 2011-2022 走看看