Это продолжение моего предыдущего вопроса: SO 4403861, потому что предложенные решения нарушили зависимости, сделав makefile бесполезен. Я не могу понять, почему.
Я использую gnu make 3.82. У меня есть правило, которое работает, если каталог obj создан:
objdir:=../obj
$(objdir)/%.o: %.C
$(COMPILE) -MM -MT$(objdir)/$(notdir $@) $< -o $(DEPDIR)/$(notdir $(basename $<).d )
$(COMPILE) -o $(objdir)/$(notdir $@ ) -c $<
Однако, если каталог obj отсутствует, make завершается ошибкой. Я хотел, чтобы make автоматически создавал ../obj по запросу, поэтому я добавил то, что мне казалось очень простым:
$(objdir)/%.o: %.C $(objdir)
$(COMPILE) -MM -MT$(objdir)/$(notdir $@) $< -o $(DEPDIR)/$(notdir $(basename $<).d )
$(COMPILE) -o $(objdir)/$(notdir $@ ) -c $<
$(objdir):
if [ ! -d $(objdir) ] ; then mkdir $(objdir) ; fi
Когда я это делаю, make всегда принудительно компилирует каждый раз. Почему? mkdir не должно происходить, если нет каталога? Почему зависимости уничтожаются этим простым изменением?