• makefile常用函数


    1、 subst函数

    格式:$(subst <from>, <to>, <text>)
    功能:把字串<text>中的<from>字符串替换成<to>
    返回:函数返回被替换过后的字符串。

    示例:
      $(subst a,the,There is a big tree)
      把“There is a big tree”中的“a”替换成“the”,返回结果是“There is the big tree”。

    2、strip函数

    格式:$(strip <string> )
    功能:去掉<string>字串中开头和结尾的空字符,并将中间的多个连续空字符(如果有的话)合并为一个空字符。
    返回:返回被去掉空格的字符串值。
    说明:空字符包括 空格,tab等不可显示的字符

    示例:
    str1 := abc
    str2 := abc 
    str3 := a     b     c

    all:
    @echo $(strip $(str1))
    @echo $(strip $(str2))
    @echo $(strip $(str3))

    输出结果:
    abc
    abc
    a b c

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

    示例: 
    sources := foo.c bar.c baz.s ugh.h 
    foo: $(sources) 
    cc $(filter %.c %.s,$(sources)) -o foo

    使用“$(filter %.c %.s,$(sources))”的返回值给 cc 来编译生成目标“foo”,函数返回
    值为“foo.c bar.c baz.s”

    4、patsubst函数
    格式:$(patsubst <pattern>,<replacement>,<text> ) 
    名称:模式字符串替换函数patsubst。
    功能:查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。这里,<pattern>可以包括通配符“%”,表示任意长度的字串。如果<replacement>中也包含“%”,那么,<replacement>中的这个“%”将是<pattern>中的那个“%”所代表的字串。(可以用“”来转义,以“\%”来表示真实含义的“%”字符)
    返回:函数返回被替换过后的字符串。

    示例:
    $(patsubst %.c,%.o,x.c.c bar.c)

    把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o bar.o”

    5、filter函数
    格式:$(filter <pattern...>,<text> )
    名称:过滤函数filter。 
    功能:以<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词。可以有多个模式。存在多个模式时,模式表达式之间使用空格分割。
    返回:返回符合模式<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 bar.c baz.s”。

    6、filter-out函数
    格式:$(filter-out <pattern...>,<text> )
    名称:反过滤函数filter-out。 
    功能:以<pattern>模式过滤<text>字符串中的单词,去除符合模式<pattern>的单词。可以有多个模式。存在多个模式时,模式表达式之间使用空格分割。
    返回:返回不符合模式<pattern>的字串。 
    示例:
    objects=main1.o foo.o main2.o bar.o 
    mains=main1.o main2.o

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

    7. dir

    $(dir <names...>)

        名称:取目录函数——dir。
        功能:从文件名序列<names>中取出目录部分。目录部分是指最后一个反斜杠(“/”)之前的部分。如果没有反斜杠,那么返回“./”。
        返回:返回文件名序列<names>的目录部分。
        示例: $(dir src/foo.c hacks)返回值是“src/ ./”。

    8. foreach

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


    这个函数的意思是,把参数<list>;中的单词逐一取出放到参数<var>;所指定的变量中,然后再执行< text>;所包含的表达式。每一次<text>;会返回一个字符串,循环过程中,<text>;的所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text>;所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值。

    9. addprefix

    $(addprefix fixstring,string1 string2 ...)
    fixstring表示任意要添加的固定前缀,在逗号的后面可以是一个或多个要添加前缀的子字符串,多> 个子字符串之间用空格隔开

    10. vpath比VPATH更灵活

    1)、vpath PATTERN DIRECTORIES 
    为符合模式“PATTERN”的文件指定搜索目录“DIRECTORIES”。多个目录使用空格或者
    冒号(:)分开。类似上一小节的“VPATH” 
    2)、vpath PATTERN 
    清除之前为符合模式“PATTERN”的文件设置的搜索路径

    Makefile中所有文件的搜索路径,包括依赖文件和目标文件。 
    变量“VPATH”的定义中,使用空格或者冒号(:)将多个目录分开。make 搜索的目录顺序
    按照变量“VPATH”定义中顺序进行(当前目录永远是第一搜索目录)。

    VPATH = src:../headers

    它指定了两个搜索目录,“src”和“../headers”。对于规则“foo:foo.c”如果“foo.c”在“src”
    目录下,此时此规则等价于“foo:src:/foo.c”

  • 相关阅读:
    Leetcode143. Reorder List重排链表
    Leetcode93. Restore IP Addresses复原IP地址
    Leetcode92. Reverse Linked List II反转链表
    Leetcode970. Powerful Integers强整数
    Leetcode931. Minimum Falling Path Sum下降路径最小和
    2019个人计划与Flag与期望
    排查问题-查看日志的正确打开方式
    Vuex-状态管理模式
    Git 常用操作(二)
    Hive:HQL和Mysql:SQL 的区别
  • 原文地址:https://www.cnblogs.com/fengtai/p/12640473.html
Copyright © 2020-2023  润新知