GNU Make. Почему этот сложный синтаксис для генерации зависимостей?

Я читаю Управление проектами с помощью GNU Make и нашел этот пример в главе 2.7 - Автоматическое создание зависимостей. Автор говорит их из руководства 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 $@.$$

Тем не менее, я смог сделать то же самое с этим (обратите внимание на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 : |' > $@;

Все эти строки создают зависимости, а затем добавляют в*.d название. Они должны были изменить первую строку с:

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

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

Мой проще и, кажется, работает довольно хорошо, но я предполагаю, что у людей GNU была причина для ихsed команда. Также:

Why do a redirect of the file into sed? Why not simply take it as a commond line parameter Why not skip the intermediary file completely?

Я знаю, что ребята из GNU тоже могли подумать об этом, но по какой-то причине пошли с более сложной настройкой. Я просто хочу понять их аргументацию, поэтому я могу сделать это на лету.

Ответы на вопрос(3)

Ваш ответ на вопрос