• 【Makefile】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”。

  • 相关阅读:
    HDU 4320 Arcane Numbers 1(质因子包含)
    BZOJ 3673: 可持久化并查集(可持久化并查集+启发式合并)
    Codeforces Beta Round #65 (Div. 2) C. Round Table Knights
    HDU 4496 D-City(逆向并查集)
    HDU 3047 Zjnu Stadium(带权并查集)
    HDU 4104 Discount(n个数不能构成的最小值)
    hihoCoder 1515 分数调查(带权并查集)
    POJ 1733 Parity game(种类并查集)
    Codeforces Round #107 (Div. 1) B. Quantity of Strings(推算)
    CSU 2005 Nearest Maintenance Point(最短路+bitset)
  • 原文地址:https://www.cnblogs.com/utank/p/11799202.html
Copyright © 2020-2023  润新知