Я пытаюсь понять, как формируется autodependency в Makefiles в данной ссылке, я не могу понять следующий фрагмент кода:Autodependency поколение Makefiles
DEPDIR = .deps
df = $(DEPDIR)/$(*F)
SRCS = foo.c bar.c ...
%.o : %.c
@$(MAKEDEPEND); \
cp $(df).d $(df).P; \
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $(df).d >> $(df).P; \
rm -f $(df).d
$(COMPILE.c) -o [email protected] $<
-include $(SRCS:%.c=$(DEPDIR)/%.P)
Я получил его от this link. Я знаю, что он будет генерировать зависимость файлы, но я не в состоянии понять, что эта строка:
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $(df).d >> $(df).P; \
Может кто-нибудь, пожалуйста, объясните мне этот код, поэтому многие подстановочных дать мне бабочка, я новичок в Makefiles.
Большое спасибо, но коды в make-файле contiki немного отличаются друг от друга. В make-файлах contiki вместо 'cp $ (df) .d $ (df) .P;' есть 'cp $ (@ :. o = .d) $ (@ :. o =. $$$$); '. Первый только копирует файлы зависимостей в формате .P, но что делает второй код? Было бы здорово, если бы вы могли мне помочь. – DarthSpeedious
'$ (@ :. o = .d)' расширяется до значения '$ @' с завершающим '.o' замененным на' .d'. Аналогично, '$ (@ :. o =. $$$$)' расширяется до значения '$ @' с завершением '.o' заменяется на'. $$ '(который оболочка затем расширяется до PID текущей оболочки) , Это временный файл, предположительно используемый во время этого правила, чтобы избежать перезаписи целевого файла до завершения процесса (атомное обновление). –