Add per-file dependency tracking
authorJan Engelhardt <jengelh@computergmbh.de>
Fri, 14 Sep 2007 14:31:10 +0000 (10:31 -0400)
committerDavid Woodhouse <dwmw2@hera.kernel.org>
Fri, 14 Sep 2007 14:31:10 +0000 (10:31 -0400)
The dependency archive ".depend" is only created once.
Changing a C file's dependencies does not remake .depend,
so make will recompile either too few or too many things.
Use of per-.c file dependencies that are created and update
during compile solve this.

Makefile

index cf1b6f9..02c7961 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -6,6 +6,7 @@ objects = ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o \
 #
 CHECKFLAGS=-D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise \
                -Wuninitialized -Wshadow -Wundef
+DEPFLAGS = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@
 
 INSTALL= install
 prefix ?= /usr/local
@@ -22,16 +23,11 @@ endif
 
 .c.o:
        $(check) $<
-       $(CC) $(CFLAGS) -c $<
+       $(CC) $(DEPFLAGS) $(CFLAGS) -c $<
 
 
 all: $(progs)
 
-$(progs): depend
-
-depend:
-       @$(CC) -MM $(ALL_CFLAGS) *.c 1> .depend
-
 btrfsctl: btrfsctl.o
        gcc $(CFLAGS) -o btrfsctl btrfsctl.o
 
@@ -51,12 +47,10 @@ quick-test: $(objects) quick-test.o
        gcc $(CFLAGS) -o quick-test $(objects) quick-test.o
 
 clean :
-       rm -f $(progs) cscope.out *.o .depend
+       rm -f $(progs) cscope.out *.o .*.d
 
 install: $(progs)
        $(INSTALL) -m755 -d $(DESTDIR)$(bindir)
        $(INSTALL) $(progs) $(DESTDIR)$(bindir)
 
-ifneq ($(wildcard .depend),)
-include .depend
-endif
+-include .*.d