使用流动的make文件:
ODIR = obj
_OBJ = hello.out
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
dir_guard=@mkdir -p $(@D)
echoit: $(OBJ)
@echo $(BAR)
target: ODIR=obj/debug
target: OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
target: echoit
$(ODIR)/hello.out:
$(dir_guard)
touch $@
clean:
rm -rd obj
当我打电话
make target
我按照预期在obj / hello.out中获取了一个文件而不是obj / debug / hello.out。任何想法我都缺少。
答案 0 :(得分:1)
$(OBJ)
规则中的 echoit
被展开;特定于目标的变量用于食谱,而不是规则,如手册points out
与自动变量一样,这些值仅在目标配方的上下文中可用(以及其他特定于目标的分配)。
我不确定你要在这里完成什么,但看起来你正在寻找像
这样的东西target: $(_OBJ:%=obj/debug/%)