簡體   English   中英

Makefile中的多個目標特定變量

[英]Multiple target specific variables in Makefile

Make不能定義多個目標特定的變量

但是這個答案中有一個宏可以解決這個問題。

assign-vars = $(foreach A,$2,$(eval $1: $A))

但可能它不能設置依賴於另一個變量的變量。 例如:

assign-vars = $(foreach A,$2,$(eval $1: $A))


multiple_variable = a=10 \
                    b=$(shell echo $$(( $(a)-1 )) )

$(call assign-vars, print, $(multiple_variable))

print:
    @echo a=$(a)
    @echo b=$(b)

我希望看到b=9作為print target 的結果,但我得到了b=-1

我該如何解決?

問題是在 for 循環運行之前, multiple_variable的全部內容首先被擴展。 因此,不可能在后期變量的賦值中引用較早的變量:它們還不會被設置。

當你運行時:

$(call assign-vars, print, $(multiple_variable))

make 做的第一件事是擴展變量multiple_variable :擴展為:

a=10 b=-1

因為當 make 去調用 shell 時, make 變量a尚未設置,所以它運行echo $(( -1 ))

我真的不知道做你想做的事情的好方法......雖然我不確定我是否理解你想要做的事情。 看來您應該退后一步,重新考慮您的要求。

如果您將其重寫為:

define newline


endef

assign-vars = $(eval $1: $(subst $(newline),$(newline)$1 :,$2))

define print_vars :=
a=10
b=$(shell echo $$(( $(a)-1 )) )
endef

這應該夠了吧。

編輯:我現在才看到,您正在嘗試從另一個計算目標特定變量。 我認為這行不通,因為我懷疑分配目標特定變量的指定順序。 因此,當b接收它的值時, a可能會或可能不會被定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM