- 论坛徽章:
- 0
|
回复 5# baiyang0817 - %.o:%.c #这里的%代表的依然是真正的src,所以检查依赖有效
- @$(CC) $(CPPFLAGS) $(CFLAGS) -o $(subst $(SRCDIR),$(OBJECTDIR),$@) -c $< #这里替换生成的.o路径
- %.c:
- @[ ! -e $@ ] && $(MKDIR) -p $(dir $(subst $(SRCDIR),$(OBJECTDIR),$@))#这里检查需要生成的.o路径是否存在,gcc不会自动创建,必须手动创建
复制代码 请教楼主两个问题:
1.如何实现增量编译(即仅编译发生变化的文件)?
==>请仔细看上面的代码,只要理解了$<和$@是什么意思,就可以看懂了, 这里在生成./src/a/a.o的时候,要依赖./src/a/a.c,只要a.c更新了,那么就会自动编译a.o了。
SRCDIR指代的是./src OBJECTDIR指代的是./build。所以@[ ! -e $@ ] && $(MKDIR) -p $(dir $(subst $(SRCDIR),$(OBJECTDIR),$@))这句话的意思就是根据需要生成的
./src/a/a.o 如果不存在./build/a/,则创建路径./build/a/。@$(CC) $(CPPFLAGS) $(CFLAGS) -o $(subst $(SRCDIR),$(OBJECTDIR),$@) -c $<中的-o后的路径是将
创建的.o放到$(subst $(SRCDIR),$(OBJECTDIR),$@) 中。所以你所说的增量编译已经实现了。
2.楼主的方法将.o和.c建立了依赖关系,有没有办法使.o再同.c中的包含的.h建立依赖关系?
关于.h的依赖,你需要熟悉gcc 的-MM -MD,通常Makefile会自动解决.h依赖的依赖问题。
最好你写个间的的Makefile用上面的依赖测试一下,用echo打出中间的变量,就理解了。 |
|