以下内容源于网络资源的学习与整理,如有侵权请告知删除。
什么叫自动变量呢?就是这种变量会把模式中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完。这种自动化变量只应出现在规则的命令中。
以一个例子说明。
OBJS = ifconfig.o tftp_util.o ping.o
SRCS = $(OBJS:.o=.c)PHONY += all
all : $(BUILT_IN_OBJ) $(BUILT_IN_OBJ) : $(OBJS)$(LD) $(LDFLAGS) -r $^ -o $@ //第一个例子$(OBJS) : $(SRCS)$(CC) $(CFLAGS) -c $^ //第二个例子PHONY += clean
clean :@rm -vf *.o.PHONY : $(PHONY)
注:$(BUILT_IN_OBJ) 和 $(PHONY)来自上层,可以不用理解。
$@:代表目标集合。第一个例子中为$(BUILT_IN_OBJ) 。
$^:代表所有的依赖对象。第一个例子中$^为$(OBJS),即 ifconfig.o tftp_util.o ping.o;第二个例子中$^为$(SRCS),即$(OBJS:.o=.c) (Makefile解释后为: ifconfig.c tftp_util.c ping.c) 。
$<:代表第一个依赖对象。如果第一个例子修改为下面的内容,则$<表示ifconfig.o。
$(BUILT_IN_OBJ) : $(OBJS)$(LD) $(LDFLAGS) -r $< -o $@