GNU Make. Dlaczego ta złożona składnia generuje zależności?

Czytam Zarządzanie projektami za pomocą GNU Make i znalazłem ten przykład w rozdziale 2.7 - Automatyczne generowanie zależności. Autor mówi o tym z podręcznika 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 $@.$$

Jednak udało mi się zrobić to samo (zauważsed):

-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 : |' > $@;

Wszystkie te linie generują zależności, a następnie dodają*.d imię. Musieli zmienić pierwszą linię z:

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

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

Mój jest prostszy i wydaje się działać całkiem dobrze, ale zakładam, że ludzie z GNU mieli powódsed dowództwo. Również:

Po co przekierowywać plik dosed? Dlaczego nie po prostu wziąć go jako parametr linii komendDlaczego nie pominąć całkowicie pliku pośredniego?

Wiem, że faceci z GNU też mogli o tym myśleć, ale z jakiegoś powodu przeszli z bardziej złożoną konfiguracją. Chcę tylko zrozumieć ich rozumowanie, więc mogę to robić w locie.

questionAnswers(3)

yourAnswerToTheQuestion