2011-06-25 269 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