這是我之前的問題的後續:SO 4403861,因爲建議的解決方案打破了依賴關係,使得makefile無用。我無法弄清楚爲什麼。取決於目錄中的製造
我使用了GNU make 3.82 我如果obj的目錄已創建一個可行的規則:
objdir:=../obj
$(objdir)/%.o: %.C
$(COMPILE) -MM -MT$(objdir)/$(notdir [email protected]) $< -o $(DEPDIR)/$(notdir $(basename $<).d)
$(COMPILE) -o $(objdir)/$(notdir [email protected]) -c $<
但是,如果obj的目錄不存在,使失敗。我想使按需自動創建../obj,所以我說我的想法很簡單:
$(objdir)/%.o: %.C $(objdir)
$(COMPILE) -MM -MT$(objdir)/$(notdir [email protected]) $< -o $(DEPDIR)/$(notdir $(basename $<).d)
$(COMPILE) -o $(objdir)/$(notdir [email protected]) -c $<
$(objdir):
if [ ! -d $(objdir) ] ; then mkdir $(objdir) ; fi
當我這樣做,使部隊始終編譯,每一次。爲什麼?除非沒有目錄,否則mkdir不應該發生?爲什麼依賴被這個簡單的改變破壞了?
正如我在迴應我的回答您的問題/評論評論4403861:_「你的規則說,該目標文件依賴於對象目錄 - 這意味着如果因爲對象文件的對象目錄已經更改是最後建立的(例如,因爲你編譯了另一個文件),那麼你的文件需要重建。您的總體構建目標取決於存在的對象目錄; 「# – 2010-12-15 19:45:40