2011-06-25 471 views
2

以下是一個人爲的示例Makefile,說明我遇到的問題。Makefile變量擴展

release: TYPE := release 
FILE = main.cpp 
OBJDIR = dist/$(TYPE) 
OBJS = $(patsubst %.cpp,$(OBJDIR)/%.o,$(FILE)) 

release: $(OBJS) 
    @echo "just created: " $(OBJS) 

%.o: 
    @echo "create [email protected]" 

當我運行「做發行」的輸出爲:

create dist//main.o 
just created: dist/release/main.o 

我怎樣才能確保$(OBJS)公佈目標的依賴擴大到dist /發行/ main.o和不是dist // main.o。還有什麼是它擴展到dist main.o的原因?

回答

2

它擴大到dist//main.o的原因是TYPE是一個特定於目標的變量。這種變量的值是唯一目標的配方(和其他具體目標任務的範圍內提供。
這意味着TYPE值的前提條件是規則空。

+0

感謝。我沒沒有意識到目標特定的變量只在目標配方內有效,我已經重新考慮了我的makefile並提出了一個解決方案。 – dbotha