2016-11-05 42 views
2

使用流動make文件中的特定目標變量:其他目標不更新的基本目標

ODIR = obj 
_OBJ = hello.out 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) 
[email protected] -p $(@D) 

echoit: $(OBJ) 
    @echo $(BAR) 


target: ODIR=obj/debug 
target: OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) 
target: echoit 

$(ODIR)/hello.out: 
    $(dir_guard) 
    touch [email protected] 

clean: 
    rm -rd obj 

當我打電話

make target 

我得到OBJ /文件hello.out文件不是我所期望的obj/debug/hello.out。任何想法我失蹤。

回答

1

$(OBJ)echoit規則在makefile首次被make解析時展開;靶特異性變量是在食譜,而不是規則的使用,作爲手動points out

與自動變量,這些值是唯一可用的一個目標的配方(的範圍內,在其它靶具體任務)。

我不完全相信你正試圖在這裏完成的,但它似乎你在尋找類似

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