Makefile常用函数

Makefile常用函数

Makefile中函数使用方式:
1. $(function param1,param2,param3,...)
2. ${function param1,param2,param3,...}
函数名和参数用空格隔开,参数名之间用逗号隔开。

1. subst

subst函数是用来替换字符串,语法如下:
$(subst old_str,new_str,src_str)
将src_str中old_str字符串全部替换为new_str, 函数返回值为替换后的新字符串,例子:
var1 = abcdefg
var2 = $(subst de,DE,$(var1))
show:
	@echo var1 : $(var2)
var2结果为:abcDEfg

2. patsubst

patsubst函数功能是完成模式字符串替换,语法如下:
$(patsubst pattern,replacement,src_str)
该函数是将src_str中符合模式pattern的字串替换为replacement;一个常用的例子,通过.c文件名生成.o文件名:
var1 = a.c b.c c.c
var2 = $(patsubst  %.c,%.o,$(var1))
show:
	@echo var1 : $(var2)
var2结果为a.o b.o c.o

3. dir

dir函数功能是获取目录,语法如下:
$(dir src_str)
从src_str中提取目录,不包含文件名,例子:
var1 = home/makefile/src/main.c
var2 = $(dir $(var1))
show:
	@echo var2 : $(var2)
var2 的值为 home/makefile/src/

4. notdir

这个函数作用是去掉目录,只保留文件名称,语法如下:
$(notdir src_str)
例子:
var1 = home/makefile/src/main.c
var2 = $(dir $(var1))
show:
	@echo var2 : $(var2)
var2 的值为 main.c

5. foreach

foreach函数作用是通过循环完成指定的操作,语法如下:
$(foreach var,list,cmd)
该函数循环逐个遍历list中的成员,每次循环将list的成员然后赋给var,同时执行cmd;
例子:
var1 = a b c d
var2 = $(foreach var,$(var1),$(var).o)
show:
	@echo var2 : $(var2)
var2的值最后为 a.o b.o c.o d.o

6. wildcard

在makefile的语法中,通配符会被自动展开,但是在变量定义和函数引用的时候会失效,这个时候为了保证通配符也能被展开,就要使用wildcard函数,语法如下:
$(wildcard pettern)
例子:
假如在工作目录下有以下两个文件:a.c, b.c
var1 = *.c
var2 = $(wildcard *.c)
show:
	@echo var1 : $(var1)
	@echo var2 : $(var2)    
var1值为 *.c
var2值为 a.c b.c

7.origin

makfile中变量的来源有以下方式:
	1.命令行传入;
		比如我们调用  make PARAM=1,那么PARAM就是从命令行传入的参数,在makefile中可以被使用;
	2.makefile中默认变量;
		比如 常见的CC、CXX、CFLAGS等等; 
	3.环境变量;
		makefile中环境变量可以理解为在整个工程里面,所有makefile都可以使用的变量,就相当于全局变量,所有的makefile都可以指直接使用;
	4.makfile中定义;
		这个就是我们在makefile中定义的变量,比如  PARAM = 1
	5.自动化变量
		这个就是makefile中@、%、<,等。
通过origin函数我们可以知道makefile中的变量是从哪里来的,或者是否被定义。
该函数使用方法:
	$(origin var)
比如我们有以下makefile:
TEST_PARAM := 1
show:
	@echo $(origin TEST_PARAM) 
	@echo $(origin INPUT)
	@echo $(origin CC)
	@echo $(origin @)
	@echo $(origin NO_DEF)
我们使用以下命令: make show INPUT=2,会得到以下结果:
file                           --> 表示TEST_PARAM是在文件中定义的
command line         --> 表示INPUT是从命令行输入的
default                     --> 表示CC是makefile中默认定义的
automatic                --> 表示@是自动化变量
undefined                --> 表示NO_DEF变量未定义

8.filter

该函数使用方法: $(filter pattern1 pattern2 ..., src_str)
该函数通过pattern(可以有多个pattern)过滤掉src_str中不符合的字符。
例子:
TEST_STR = a.c a.h b.c b.h c.c c.h d.cpp d.h
FILTER_STR = $(filter %.c %.cpp,$(TEST_STR))
show:
	@echo $(FILTER_STR)
结果输出:a.c b.c c.c d.cpp, 只保留以.c和.cpp结尾的字符

9.firstword

顾名思义取字符串中的第一个单单词,用法:$(firstword src_str)
还是用上面的例子:
TEST_STR = a.c a.h b.c b.h c.c c.h d.cpp d.h
show:
	@echo $(firstword $(TEST_STR))
结果输出:a.c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值