[英]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.