其他目标不更新基础目标的目标特定变量

时间:2016-11-05 02:30:27

标签: makefile gnu-make

使用流动的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。任何想法我都缺少。

1 个答案:

答案 0 :(得分:1)

当make文件首次被make解析时,$(OBJ)规则中的

echoit被展开;特定于目标的变量用于食谱,而不是规则,如手册points out

  

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

我不确定你要在这里完成什么,但看起来你正在寻找像

这样的东西
target: $(_OBJ:%=obj/debug/%)