makefile的特殊变量,类似$@, $+等 (copied)

来源:http://hi.baidu.com/jingweiyoung/item/dea74399c40eb24cf14215cf






Makefile 特殊变量

常用特殊变量

例:

%.o:%.c

          ¥(CC) -c $(CFLAGS) $< -o $@

 

$@ 表示所有目标,这里是.o文件

$<  表示依赖目标中第一个目标的名子,这里是 .c文件。如果依赖目标是以模式(%)定义的,那么"$<"将是符合模式的一系列文件集。(注:是一个一个取出来的)

$?  所有比目标新的依赖目标的集合,以空格分隔。

$^  所有依赖目标的集合,以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。

$+  这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。

$*  这个变量表示目标模式中"%"及其之前的部分。如果目标是"dir/a.foo.b",并且目标的模
式是"a.%.b",那么,"$*"的值就是"dir/a.foo"。这个变量对于构造有关联的文件名是比
较有较。如果目标中没有模式的定义,那么"$*"也就不能被推导出,但是,如果目标文
件的后缀是make所识别的,那么"$*"就是除了后缀的那一部分。例如:如果目标
是"foo.c",因为".c"是make所能识别的后缀名,所以,"$*"的值就是"foo"。这个特性
是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用"$
*",除非是在隐含规则或是静态模式中。如果目标中的后缀是make所不能识别的,那
么"$*"就是空值。
当你希望只对更新过的依赖文件进行操作时,"$?"在显式规则中很有用,例如,假设
有一个函数库文件叫"lib",其由其它几个object文件更新。那么把object文件打包的比
较有效率的Makefile 规则是:
lib : foo.o bar.o lose.o win.o
ar r lib $?
在上述所列出来的自动量变量中。四个变量($@、$<、$%、$*)在扩展时只会有一个文
件,而另三个的值是一个文件列表。这七个自动化变量还可以取得文件的目录名或是在
当前目录下的符合模式的文件名,只需要搭配上"D"或"F"字样。这是GNU make中老版
本的特性,在新版本中,我们使用函数"dir"或"notdir"就可以做到了。"D"的含义就是
Directory,就是目录,"F"的含义就是File,就是文件。

 

摘自:《跟我一起写Makefile》作者:陈皓

 

实例:

 

.SUFFIXES: .pc .c .o
CC=gcc
PROC=proc
AR=ar
INCL = ../../include
SYSINCL1 = -L../lib -lc -lnsl -lm
GFLAG = -g
VPATH = ../common


COMM_SRC = readini.c timetool.c syslog.c cfgfresh.c almstatmsg.c  msgproc.c filetool.c dupauth.c hbproc.c code.c nettool.c
COMM_TGT = $(COMM_SRC:.c=.o)

all:$(COMM_TGT)
.c.o:
        $(CC)   $(GFLAG) -c -I$(INCL) $?

#make without DB
#DUP_SRC = tickfilter.c hash.c
#DUP_TGT        = $(DUP_SRC:.c=.o) $(COMM_TGT)
#TickFilter: $(DUP_TGT)
#       $(CC) $(GFLAG) -o $@ $(DUP_TGT) -I$(INCL) $(SYSINCL1)
#       mv $@ ../../

.PHONY:clean
clean:
        -rm -f *.o


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值