+ $(COMPILE.c) -MT $@ -MMD -MP -MF $(@:.o=.d) $(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.