Makefile 其他目标不';t更新基本目标的目标特定变量

Makefile 其他目标不';t更新基本目标的目标特定变量,makefile,gnu-make,Makefile,Gnu 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

使用流动生成文件:

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。任何我缺少的想法。

$(OBJ)
当make第一次解析makefile时,扩展
echoit
规则中的
;特定于目标的变量用于食谱,而不是手册中的规则

与自动变量一样,这些值仅在目标配方的上下文中可用(以及在其他特定于目标的分配中)

我不太确定你想在这里完成什么,但看起来你在寻找类似的东西

target: $(_OBJ:%=obj/debug/%)