快速编写“专家级”makefile(2.创建基本编译环境-使用功能”函数“)



1.abspath
  •     功能:将 _names 中的各路径名转换成绝对路径
  •     形式:$(abspath _names)
  •     返回值:返回转换结果
实例:
 
  
  1. .PHONY : all
  2. ROOT := $(abspath /usr/.../lib)
  3. all :
  4. @echo $(ROOT)
    运行结果
$make
/lib
    
2.addprefix
  •    功能:给名字列表 _names 中的每一个名字增加前缀 _prefix
  •     形式:$(addprefix _prefix, _names)
  •     返回值:返回增加了前缀的名字列表
实例:
 
  
  1. .PHONY : all
  2. without_dir = foo.c bar.c main.o
  3. with_dir := $(addprefix objs/, $(without_dir))
  4. all :
  5. @echo $(with_dir)
    运行结果
$make
objs/foo.c  objs/bar.c  objs/main.o

3.addsuffix
  •     功能:给名字列表 _names 中的每一个名字增加后缀 _suffix
  •     形式:$(addsuffix _suffix, _names)
  •     返回值:返回增加了后缀的名字列表
实例:
 
    
  1. .PHONY : all
  2. without_suffix = foo bar main
  3. with_suffix := $(addsuffix .c, $(without_suffix))
  4. all :
  5. @echo $(with_suffix)
    运行结果
$make
foo.o bar.o main.o
4.eval
  •     功能:使 make 再一次解析 _text 语句
  •     形式:$(eval _text)
  •     返回值:空
实例:
 
    
  1. .PHONY : all
  2. sources = foo.c bar.c baz.s ugh.h
  3. $(eval sources := $(filter %.c %.s, $(sources)))
  4. all :
  5. @echo $sources
    运行结果
$make
main.c

5.filter
  •     功能:从一个名字列表 _text 中根据模式 _pattern 得到满足需要的名字列表
  •     形式:$(filter _pattern, _text)
  •     返回值:返回满足需要的名字列表
实例:
 
    
  1. .PHONY : all
  2. sources = foo.c bar.c baz.s ugh.h
  3. sources := $(filter %.c %.s, $(sources))
  4. all :
  5. @echo $(sources)
    运行结果
$make
foo.c bar.c baz.s
6.filter_out
  •     功能:从名字列表 _text 中根据模式 _pattern 滤除一些名字
  •     形式:$(filter_out  _pattern, _text)
  •     返回值:返回滤除后的名字列表
实例:
 
    
  1. .PHONY : all
  2. objs = main1.o foo.o main2.o bar.o
  3. ret = $(filter_out main%.o, $(objs))
  4. all :
  5. @echo $(ret)
   运行结果
$make
foo.o bar.o

7.notdir
  •     功能:从路径 _names 中提取文件名
  •     形式:$(notdir _names)
  •     返回值:返回文件名
实例:
 
    
  1. .PHONY : all
  2. file_name := $(notdir code/foo/src/foo.c code/bar/src/bar.c)
  3. all :
  4. @echo $(file_name)
   运行结果
$make
foo.c bar.c
8.patsubst
  •     功能:将名字列表 _text 中符合 _pattern 模式的名字替换为 _replacement
  •     形式:$(patsubst _pattern, _replacement, _text)
  •     返回值:返回替换后的名字列表
实例:
 
    
  1. .PHONY : all
  2. mixed = foo.c bar.c main.o
  3. obj := $(patsubst %.c, %.o, $(mixed))
  4. all :
  5. @echo $(obj)
   运行结果
$make
foo.o bar.o main.o

9.realpath
  •     功能:获取 _names 所对应的真实路径名
  •     形式:$(realpath _names)
  •     返回值:返回真实路径名
实例:
 
    
  1. .PHONY : all
  2. ROOT := $(realpath ./..)
  3. all :
  4. @echo $(ROOT)
   运行结果
$pwd
/home/jiang
$make
/home
10.strip
  •     功能:清除名字列表中的多余空格
  •     形式:$(strip _string)
  •     返回值:返回去除多余空格的 _string
实例:
 
    
  1. .PHONY : all
  2. ori = foo.c bar.c
  3. str := $(strip $(ori))
  4. all :
  5. @echo $(str)
   运行结果
$make
ori = foo.c       bar.c
str = foo.c bar.c

11.wildcard
  •     功能:获取当前工作目录下满足 _pattern 模式的文件或目录名列表
  •     形式:$(wildcard _pattern)
  •     返回值:返回获取到的文件或目录名列表
实例:
 
    
  1. .PHONY : all
  2. SRCS = $(wildcaed *.c)
  3. all :
  4. @echo $(SRCS)
   运行结果
$ls
bar.c foo.c main.c
$make
bar.c foo.c main.c
参考文献:《专业嵌入式软件开发》李云·著                                                                                      2016年7月5日,星期二

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值