GNU Make. Warum diese komplexe Syntax, um Abhängigkeiten zu erzeugen?

Ich lese Projekte mit GNU Make verwalten und finde dieses Beispiel in Kapitel 2.7 - Automatische Generierung von Abhängigkeiten. Der Autor sagt ihr aus dem GNU-Handbuch:

%.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 $@.$$

Allerdings konnte ich das Gleiche damit machen (beachte dassed):

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

All diese Zeilen erzeugen die Abhängigkeiten und fügen dann die hinzu*.d Name. Sie mussten die erste Zeile ändern von:

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

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

Meins ist einfacher und scheint ganz gut zu funktionieren, aber ich gehe davon aus, dass die GNU-Leute einen Grund dafür hattensed Befehl. Ebenfalls:

Warum eine Umleitung der Datei insed? Warum nicht einfach als Kommandozeilenparameter nehmenWarum überspringen Sie die Vermittlungsdatei nicht vollständig?

Ich weiß, die Leute von GNU hätten auch daran denken können, aber aus irgendeinem Grund haben sie sich für das komplexere Setup entschieden. Ich möchte nur ihre Argumentation verstehen, damit ich diese sofort ausführen kann.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage