Я следил http://make.mad -scientist.net /apers / advanced-auto-dependency-generation / # объединить , чтобы создать Makefile, который также сгенерирует список зависимостей, поэтому списокЗаголовочные файлы, от которых зависит цель .o
(из соответствующего файла .c
), автоматически генерируются.
Созданный мной Makefile:
DEPDIR := .deps
$(shell mkdir -p $(DEPDIR))
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td
INCDIR = ../includes
CFLAGS = -I$(INCDIR)
CC = gcc
SRCS = main.c chunk.c memory.c
COMPILE.c = $(CC) $(DEPFLAGS) $(CFLAGS) $(TARGET_ARCH) -c
POSTCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d && touch $@
%.o: %.c
%.o: %.c $(DEPDIR)/%.d
$(COMPILE.c) $(OUTPUT_OPTION) $<
$(POSTCOMPILE)
$(DEPDIR)/%.d: ;
.PRECIOUS: $(DEPDIR)/%.d
include $(wildcard $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRCS))))
выполняется make main.o
создаетmain.o
и .deps/main.d
, как ожидается, и изменение одного из заголовочных файлов, включенных в main.c
, приводит к тому, что main.o
устаревают и восстанавливаются по желанию.Однако main.o
также должен быть устаревшим, если .deps/main.d
не существует, но удаление .deps/main.d
не приводит к тому, что make
не увидит main.o
как устаревшее.
Что необходимо дляизменить, чтобы удалить .deps/main.d
, чтобы make
считал main.o
устаревшим?