If gcc's preprocessor chokes, it leaves an empty dependency file
behind, and doesn't touch the object file. If an old object file
exists, and is newer than the .c file, make will then consider the
object file up-to-date. This can lead to nasty version errors.
# addition to %.o.
ifeq ($(how_to_dep),fast)
%.o: %.c
- $(COMPILE.c) -MT $@ -MMD -MP $(OUTPUT_OPTION) $<
+ $(COMPILE.c) -MT $@ -MMD -MP $(OUTPUT_OPTION) $< \
+ || { rm -f $(@:.o=.d) $@; false; }
+# Why the rm? If gcc's preprocessor chokes, it leaves an empty
+# dependency file behind, and doesn't touch the object file. If an
+# old object file exists, and is newer than the .c file, make will
+# then consider the object file up-to-date.
endif
ifeq ($(how_to_dep),depcomp)
%.o: %.c