这是对我早前问题的跟进: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才应该发生。为什么这个简单的更改会破坏依赖关系呢?