书写Makefile之Makefile的内置函数

■filter函数:

  说明:从一个文字列中筛选单词(根据空格来区分单词),如果找到要找的单词就返回。”%”符号表示任意文字
  使用方法:$(filter pattern,text) => pattern:希望查找的单词, text:被查找的源文字列
  例子:
text := abc def ghi jkl
test :
        @echo $(filter a%c, $(text))
  结果:abc
    
■filter-out函数:
  说明:跟filter刚好相反,把没有找到的单词返回
  使用方法:$(filter pattern,text) => pattern:不希望查找的单词, text:被查找的源文字列
  例子:
text := abc def ghi jkl
test :
        @echo $(filter-out a%c, $(text))
  结果:def ghi jkl
■findstring函数:
  说明:查找源字符串,返回要包含要查找字符的单词。注意不能使用模糊查找字符%
  使用方法:$(findstring pattern,text) => pattern:希望查找的字符, text:被查找的源文字列
  例子:
text := abc def ghi jkl
test :
        @echo $(findstring ab, $(text))
  结果:abc
■subst函数:
  说明:包含了查找,以及置换功能。注意不能使用模糊查找字符%
  使用方法:$(subst search-str, rep_str, target)
  例子:
text := test1.c test2.c test3.c
test :
        @echo $(subst .c,.o $(text))
  结果:test1.o test2.o test3.o
■patsubst函数:
  说明:功能跟函数subst一样,也是查找,替换的功能,但是可以模糊查找并替换找到的结果
  使用方法:$(patsubst search-str, rep_str, target)
  例子:
text := /home/usr/
test :
        @echo $(patsubst %/,% $(text))
  结果:/home/usr
■words函数:
  说明:返回字符串中的单词数
  使用方法:$(words text)
  例子:
text := abc def ghi jkm
test :
        @echo $(words,$(text))
  结果:4
■word函数:
  说明:返回字符串中的第N个单词,默认的第一个单词为1
  使用方法:$(word, n, text)
  例子:
text := abc def ghi jkm
test :
        @echo $(word 2, $(text))
  结果:def
■firstword函数:
  说明:返回字符串头个单词,跟$(word 1, text)一样
  使用方法: $(firstword, text)
  例子:
text := abc def ghi jkm
test :
        @echo $(firstword $(text))


  结果:abc
■wordlist函数:
  说明:指定范围的单词一栏返回
  使用方法: $(wordlist start, end, text)
  例子:
text := abc def ghi jkm
test :
        @echo $(wordlist 2, 3, $(text))
  结果:def ghi
■sort函数:
  说明:排列文字列的单词
  使用方法:$(sort text)
  例子:
text := def ghi jkm abc
test :
        @echo $(sort $(text))
  结果:abc def ghi jkm
■call函数:
  说明:调用makfile内定义的函数
  使用方法:$(call macro-name, [param...])
  例子:
define call-test
        @echo "paramter test $1"
endif
default:
        $(call call-test, dayo)
  结果:paramter test dayo
■shell函数:
  说明:把命令的跟参数一起,在子shell里使用
  使用方法: $(shell cmd)
  例子:
TEST := $(shell ls -al)
all:
        @echo $(TEST)
  结果:
■wildcard函数:
  说明:取得对象物一栏,“*”可模糊查找
  使用方法:
  例子:
SRC_FILES := $(wildcard *.cpp *.h)
echo $SRC_FILES
  结果:
■dir函数:
  说明:返回药查找文件的目录
  使用方法:$(dir list)
  例子:
SRC_LIST := $(sort $(dir $(shell find . -name '*.cpp')))
  结果:
■notdir函数:
  说明:与dir命令相反返回要查找的文件
  使用方法:$(notdir list)
  例子:
SRC_LIST := $(sort $(notdir $(shell find . -name '*.cpp')))
  结果:
■suffix函数:
  说明:返回参数的后缀
  使用方法:$(suffix list)
  例子:
SRC_LIST := $(sort $(suffix $(shell find . -name 'aa*')))
  结果:
■basename函数:
  说明:返回要查找的目录跟文件名(不包括后缀)
  使用方法:$(basename list)
  例子:
SRC_LIST:=$(basename $(shell find . -name '*.cpp'))
  结果:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值