@cyysu
2017-10-17T06:41:06.000000Z
字数 2109
阅读 936
- 时间:2017年10月16日
- 作者:Kali
- 邮箱:cyysu.github.io@gmail.com
- 版本:3.0
- 描述:Makefile-基础五,为Linux 4.4 Makefile中所遇到的知识点汇总
Makefile系列教程
# Makefile call函数例子# call 函数是唯一一个可以用来创建新的参数化的函数。你可以写一个非常复杂的表达式, 这个表达式中,你可以定义许多参数,然后你可以用call函数来向这个表达式传递参数。其语法是:$(call <expression>,<parm1>,<parm2>,<parm3>...)# 当make执行这个函数时,<expression>参数中的变量,如$(1),$(2),$(3)等,会被参 数<parm1>,<parm2>,<parm3>依次取代。而<expression>的返回值就是call函数的返回值。下面举个例子来说明mj@DZ:~/桌面$ cat MakefileSIGNAL = $(shell printf "\033[34;1m★\033[0m")reverse = $2 $1foo = $(call reverse, jhello,dawdad)_all:@echo $(foo)mj@DZ:~/桌面$ makedawdad jhello# makefile patsubst函数patsubst是patten substitude的缩写,匹配替代的意思。下面看一个例子mj@DZ:~/桌面$ cat MakefileSIGNAL = $(shell printf "\033[34;1m★\033[0m")reverse = $2 $1SRC = a.c b.c m.c.call:@echo $(patsubst %.c,%.s,${SRC})@echo $(patsubst %.c,%,${SRC})@echo $(subst .c,.s, ${SRC})# 执行结果mj@DZ:~/桌面$ makea.s b.s m.c.sa b m.ca.s b.s m.s.s# 如果我们没有匹配上,那么会输出原字符串mj@DZ:~/桌面$ cat MakefileSIGNAL = $(shell printf "\033[34;1m★\033[0m")reverse = $2 $1SRC = a.c b.c m.c.call:@echo $(patsubst "%.c","%.s",${SRC})@echo $(patsubst %.c,%.s,${SRC})@echo $(patsubst %.c,%,${SRC})@echo $(subst .c,.s, ${SRC})# 执行结果mj@DZ:~/桌面$ makea.c b.c m.c.ca.s b.s m.c.sa b m.ca.s b.s m.s.s# makefile notdir函数功能: 从文件名序列 <names> 中取出非目录部分# 下面来看一个例子mj@DZ:~/桌面$ cat MakefileSIGNAL = $(shell printf "\033[34;1m★\033[0m")reverse = $2 $1SRC = a.c b.c m.c.cDD=$(notdir /home/a.c ./bb.c ../c.c d.c)all1:@echo $(DD)mj@DZ:~/桌面$ makea.c bb.c c.c d.c########下面还有几个函数,大家可以自己去练习取目录函数: $(dir <names...>)功能: 从文件名序列 <names> 中取出目录部分返回: 文件名序列 <names> 中的目录部分# Makefile 内容all:@echo $(dir /home/a.c ./bb.c ../c.c d.c)$ make/home/ ./ ../ ./取后缀函数: $(suffix <names...>)功能: 从文件名序列 <names> 中取出各个文件名的后缀返回: 文件名序列 <names> 中各个文件名的后缀, 没有后缀则返回空字符串# Makefile 内容all:@echo $(suffix /home/a.c ./b.o ../c.a d)$ make.c .o .a取前缀函数: $(basename <names...>)功能: 从文件名序列 <names> 中取出各个文件名的前缀返回: 文件名序列 <names> 中各个文件名的前缀, 没有前缀则返回空字符串# Makefile 内容all:@echo $(basename /home/a.c ./b.o ../c.a /home/.d .e)$ make/home/a ./b ../c /home/# foreach函数,直接用例子来说mj@DZ:~/桌面$ cat Makefile# Makefile 内容targets := a b c dobjects := $(foreach i,$(targets),$(i).o)all:@echo $(targets)@echo $(objects)# 运行结果mj@DZ:~/桌面$ makea b c da.o b.o c.o d.o
上面的例子我是摘自下面这篇文章,书写格式也很悦目,大家可以查看一下
http://www.cnblogs.com/wang_yb/p/3990952.html
支付宝 微信