以下是一个人为的示例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?
答案 0 :(得分:2)
它扩展到dist//main.o
的原因是TYPE
是特定于目标的变量。此类变量的值仅在目标配方的上下文中可用(以及在其他特定于目标的分配中。)
这意味着TYPE
的值在该规则的先决条件中为空。