Makefile变量扩展

时间:2011-06-25 20:40:41

标签: makefile gnu-make

以下是一个人为的示例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 $@"

当我运行'make release'时,输出为:

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

如何确保释放目标的$(OBJS)依赖关系扩展为dist / release / main.o而不是dist // main.o。它也是什么原因扩展到dist // main.o?

1 个答案:

答案 0 :(得分:2)

它扩展到dist//main.o的原因是TYPE是特定于目标的变量。此类变量的值仅在目标配方的上下文中可用(以及在其他特定于目标的分配中。) 这意味着TYPE的值在该规则的先决条件中为空。