GNU Make. ¿Por qué esta sintaxis compleja para generar dependencias?

Estoy leyendo Administración de proyectos con GNU Make y encontré este ejemplo en el Capítulo 2.7: Generación automática de dependencia. El autor dice su desde el manual de GNU:

%.d: %c
        $(CC) -M $(CPPFLAGS 
%.d: %c
        $(CC) -M $(CPPFLAGS $< > $@.$$$$; \
              sed s',\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
              rm -f $@.$$$$
lt; > $@.$$; \ sed s',\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$ > $@; \ rm -f $@.$$

Sin embargo, pude hacer lo mismo con esto (note lased):

-include $(subst .c,.d,$(SOURCES))

%.d: %.c
          @$(CC) -M $(CPPFLAGS) 
-include $(subst .c,.d,$(SOURCES))

%.d: %.c
          @$(CC) -M $(CPPFLAGS) $<  | sed 's|:| $*.d : |'  > $@;
lt; | sed 's|:| $*.d : |' > $@;

Todas estas líneas hacen es generar las dependencias, luego agregar en el*.d nombre. Tuvieron que cambiar la primera línea de:

  foo.o: bar.h foo.h fubar.h

to foo.o foo.d: bar.h foo.h fubar.h

El mío es más simple y parece funcionar bastante bien, pero supongo que la gente de GNU tuvo una razón para sused mando. También:

¿Por qué hacer una redirección del archivo ased? ¿Por qué no simplemente tomarlo como un parámetro de línea común?¿Por qué no omitir el archivo intermediario completamente?

Sé que los chicos de GNU podrían haber pensado en esto también, pero por alguna razón, optaron por una configuración más compleja. Solo quiero entender su razonamiento, para poder hacer esto sobre la marcha.

Respuestas a la pregunta(3)

Su respuesta a la pregunta