Makefile技巧总结

Makefile技巧总结

 

  这里主要记录一些实用的Makefile编写技巧。


(1)wildcard、notdir与patsubst
  wildcard : 扩展通配符
  notdir : 去除路径
  patsubst :替换通配符

  例如:在test目录下建立a.c与b.c,在子目录sub下建立sa.c和sb.c
  新建一个Makefile,内容如下:

  运行结果如下:


  第一行输出:a.c b.c ./sub/sa.c ./sub/sb.c
  说明:wildcard将目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。
  扩展:我们可以使用wildcard得到指定目录下所有的 C语言源程序文件名避免手工指定需要编译的 .c文件 。方法:SRC = $(wildcard *.c),相当于指定编译当前目录下所有.c文件,处理子目录中的文件:SRC = $(wildcard *.c) $(wildcard inc/*.c),同理也可以指定汇编源程序:ASRC = $(wildcard *.S),这样可以方便定制通用Makefile。


  第二行输出:a.c b.c sa.c sb.c
  说明:notdir把展开的文件去除掉路径信息


  第三行输出:a.o b.o sa.o sb.o
  说明:在$(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o,
  扩展:这里也可以使用obj=$(dir:%.c=%.o) ,效果相同。这是Makefile里的替换引用规则,即用指定的变量替换另一个变量。它的标准格式是$(var:a=b) 或 ${var:a=b}它的含义是将变量var中的每一个值的结尾a用b替换


(2)$$变量S(变量)与$变量的区别

  $A或者$(A)是Makefile的变量,$$表示Shell中的$,用来区分shell下引用变量。

  比如:

  

  第一个可以正常输出,第二个不可以,因为第二个表示Shell变量,而这里A给一个Makefile自身的变量。再如:

  

  第三个可以正常输出,前两个不行,for循环使用的是Shell编程实现,变量i是Shell中的。

 

注:本文作者neonlight <neonlight@live.cn>,Blog http://blog.csdn.net/neonlight ,转载请注明出处!2010-04-07

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值