Use the gcc -MMD -MP -MF options to generate dependency rules as a byproduct when building .o files. A bit remains to be done: - add the same support to the .c.s rule - make this optional (not all compilers support this, and not all developers necessarily want to litter the directory with .*.o.d files) - document what gcc version introduced these options - find equivalent options for other compilers (e.g., Intel C, SunWSPro, MSVC) but this should give the idea. Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- Good idea? Bad idea? Good night, Jonathan .gitignore | 1 + Makefile | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletions(-) diff --git a/.gitignore b/.gitignore index ac02a58..c7b2736 100644 --- a/.gitignore +++ b/.gitignore @@ -170,6 +170,7 @@ *.exe *.[aos] *.py[co] +.*.o.d *+ /config.mak /autom4te.cache diff --git a/Makefile b/Makefile index ed0f461..af3f874 100644 --- a/Makefile +++ b/Makefile @@ -488,6 +488,7 @@ LIB_H += unpack-trees.h LIB_H += userdiff.h LIB_H += utf8.h LIB_H += wt-status.h +LIB_H := LIB_OBJS += abspath.o LIB_OBJS += advice.o @@ -1559,13 +1560,23 @@ git.o git.spec \ $(patsubst %.perl,%,$(SCRIPT_PERL)) \ : GIT-VERSION-FILE +dep_file = $(dir $@).$(notdir $@).d +dep_args = -MF $(dep_file) -MMD -MP + %.o: %.c GIT-CFLAGS - $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $< + $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $< %.s: %.c GIT-CFLAGS $(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $< %.o: %.S $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $< +objects := $(wildcard *.o block-sha1/*.o arm/*.o ppc/*.o \ + compat/*.o compat/*/*.o xdiff/*.o) +dep_files := $(wildcard $(foreach f,$(objects),$(dir $f).$(notdir $f).d)) +ifneq ($(dep_files),) +include $(dep_files) +endif + exec_cmd.o: exec_cmd.c GIT-CFLAGS exec_cmd.o: ALL_CFLAGS += \ '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \ @@ -1875,6 +1886,8 @@ distclean: clean clean: $(RM) *.o block-sha1/*.o arm/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o \ $(LIB_FILE) $(XDIFF_LIB) + $(RM) .*.o.d block-sha1/.*.o.d arm/.*.o.d ppc/.*.o.d compat/.*.o.d \ + compat/*/.*.o.d xdiff/.*.o.d $(RM) $(ALL_PROGRAMS) $(BUILT_INS) git$X $(RM) $(TEST_PROGRAMS) $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags cscope* -- 1.6.5.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html