你了解Makefile的内嵌函数?

subst     字符   串替换函数

$(subst , , ),把中的字符串替换成,返回被替换过的字符串

SRC:=/mnt/hgfs/share/123DES:=$(subst /mnt,/root,$(SRC)) #AT     TE   N     TI   ON:是,/root不是, /rootall: @echo $(SRC) @echo $(DES)/mnt/hgfs/share/123/root/hgfs/share/123

patsubst模式字符串替换函数

$(patsubst , , )

,查找中的单词(单词以 空格,Tab,回车 分隔)是否符合模式,符合的话,则以替换,这里,可以包括通配符 % 表示任意长度的字符串,如果中也包含 %, 则 中的这个 % 将是 中的那个 % 所代表的字符串

SRC:=/mnt/hgfs/share/123DES:=$(patsubst %/123,%/456,$(SRC))all: @echo $(SRC) #Note:shell可不支持@ @echo $(DES)/mnt/hgfs/share/123/mnt/hgfs/share/456

strip

$(strip a b c)把字符串去掉开头和结尾的空格,结果是 “a b c”

DES:=$(strip 12,43 ) #参数字符串是从1开始的,能去掉最后一个空格DES:=$(strip “ 12,43 ”) #参数字符串是从空格开始的,能去掉最后一个空格all: @echo $(DES)/mnt/hgfs/share/123 12,43

findstring查找字符串函数

$(findstring , ),在字符串中查找,如果找到,就返回,否则返回空

SRC:=/mnt/hgfs/share/123DES:=$(findstring /mnt,$(SRC))all: @echo $(SRC) @echo $(DES)/mnt/hgfs/share/123/mnt

filter过滤函数

$(filter , ),以模式过滤字符串的单词,保留模式的单词,可以有多个

SRC:= 123.c 789.c 456.s eee.j#DES:=$(filter %.c,%.s,$(SRC)) #WRONG!!!DES:=$(filter %.c %.s,$(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j123.c 789.c 456.s

filter-out反过滤函数

$(filter-out ,)

,以模式过滤字符串的单词,去除模式的单词,可以有多个

SRC:= 123.c 789.c 456.s eee.jDES:=$(filter-out %.c,$(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j456.s eee.j

sort排序函数

$(sort ),给字符串中的单词(不是字符)按升序排序

SRC:= 123.c 789.c 456.s eee.jDES:=$(sort $(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j123.c 456.s 789.c eee.j

word

$(word ,)取单词函数,取字符串中的第个单词,返回字符串中的第n个单词,如果n比中的单词要大,那么返回空字符串

SRC:= 123.c 789.c 456.s eee.jDES:=$(word 2,$(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j789.c

wordlist取单词串函数

$(wordlist , , )

,从字符串中取从开始到的单词串,和是一个数字,返回取出的单词串,如果s大于,那么返回空,如果e大于,则返回从s开始到结尾的字符串

SRC:= 123.c 789.c 456.s eee.jDES:=$(wordlist 2,4,$(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j789.c 456.s eee.j

words单词个数统计函数

$(words ),返回单词数

SRC:= 123.c 789.c 456.s eee.jDES:=$(words $(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j4

fi     rs   tword首单词函数

$(firstword ),返回的第一个单词

SRC:= 123.c 789.c 456.s eee.jDES:=$(firstword $(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j123.c

dir取目录函数

$(dir ),从每个name中取出目录部分,返回文件所在目录,如果没有/,则返回。/

SRC:=/mnt/hgfs/share/123DES:=$(dir $(SRC))all: @echo $(SRC) @echo $(DES)/mnt/hgfs/share/123/mnt/hgfs/share/

notdir取文件函数

$(notdir ),从每个name中取出文件部分,返回文件名,如果没有文件,返回空。这里的name必须是变量名,不能是变量的内容,否则什么都不会返回

SRC:=/mnt/hgfs/share/123DES:=$(notdir $(SRC))all: @echo $(SRC) @echo $(DES)/mnt/hgfs/share/123123

suffix取后缀函数

$(suffix ),从文件名序列中取出各个文件的后缀,返回后缀,如果没有后缀,返回空

SRC:= 123.c 789.c 456.s eee.jDES:=$(suffix $(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j.c .c .s .j

basename取前缀函数

$(basename ),从文件名序列中取出各个文件的前缀,返回前缀,如果没有前缀,返回空

SRC:= 123.c 789.c 456.s eee.jDES:=$(basename $(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j123 789 456 eee

addsuffix

$(addsuffix , )加后缀函数

,将后缀加到中每个单词的后面,返回加过后缀的文件名序列

SRC:= 123.c 789.c 456.s eee.jDES:=$(addsuffix _suf,$(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j123.c_suf 789.c_suf 456.s_suf eee.j_suf

addprefix

$(addprefix , )加前缀函数

,将前缀加到中每个单词的后面,返回加过前缀的文件名序列

SRC:= 123.c 789.c 456.s eee.jDES:=$(addprefix prf_,$(SRC))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.jprf_123.c prf_789.c prf_456.s prf_eee.j

join

$(join , )连接函数

,把中的单词对应的加到的单词的后面,如果中的单词更多,则多出来的单词保持原样,如果的单词个数更多,那么多出来的被复制到中

SRC:= 123.c 789.c 456.s eee.jSRCJOIN:= q e r t y uDES:=$(join $(SRC),$(SRCJOIN))all: @echo $(SRC) @echo $(DES)123.c 789.c 456.s eee.j123.cq 789.ce 456.sr eee.jt y u

foreach

$(foreach , , )

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

if

$(if , )

$(if , ,)

返回非0即为真

call创建函数的函数

$(call , , , …)

origin确定变量的出身

$(origin )

,返回值有 “undefined”, “default”, “environment”, “file”, “command line”, “override” , “automa  TI c”

shell

$(shell )或$()

参数是一个shell命令

error

$(error )

错误生成函数,是错误信息

你了解Makefile的内嵌函数?_设计制作_RF/无线
75
117
0
3

相关资讯

  1. 1、上达电子斩获BOESPC2018“卓越服务奖”4718
  2. 2、Supermicro推出业内首个通过NEBS第3级认证的1U服务器4394
  3. 3、中科银河芯发布高速温度传感器芯片GXTS02S,通讯速度可达1MHz1798
  4. 4、鸿海在威斯康辛州生产LCD面板计划或有变,因美国制造成本高1232
  5. 5、新型n型有机半导体最高ZT值可达0.3以上3231
  6. 6、“无质量”电子可能为更快的电子设备让路969
  7. 7、电位器的测试,好坏判别,主要的参数有哪些?1920
  8. 8、什么是LED封装器件,它的技术原理又是什么?1644
  9. 9、新华三与云南能投战略合作,携手探索云上一带一路3256
  10. 10、新型AI机器人:仅观察一次就能模仿人类做出的动作3344
全部评论(0)
我也有话说
0
收藏
点赞
顶部