缘由:以前跑过一段时间的Linux编程,但现在已经快忘了,所以又拿来复习一遍,再看如何写Makefile时,不知道程序中$@ $^ $< 分别是什么,本着了解本质的精神,百度了一下,在论坛的一篇帖子中找到答案。
原文地址:http://bbs.chinaunix.net/thread-1596089-1-1.html 内容:
给个例子你分析一下(来自国内开源项目g-bios) g-bios/app/net/Makefile ---------------------------------------------------------------------------------------------------------------------------------------- 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)来自上层目录g-bios/app/Makefile,可以不用理解。 $@ 代表目标 上例为$(BUILT_IN_OBJ) $^ 代表所有的依赖对象 上例第一个$^为$(OBJS),即 ifconfig.o tftp_util.o ping.o,上例第二个$^为$(SRCS),即$(OBJS:.o=.c) (Makefile解释后为: ifconfig.c tftp_util.c ping.c) $< 代表第一个依赖对象 前面例子修改如下: $(BUILT_IN_OBJ) : $(OBJS) $(LD) $(LDFLAGS) -r $< -o $@ 则$<表示为ifconfig.o |