define foo
$(eval a := $(1))
$(eval b := $(1))
endef
bar:=$(call foo,hello)
$(info $(a))
$(info $(b))
$(info bar=[$(bar)])
all: ;
運行此生成的文件輸出:
$ make -f Makefile.sample
hello
hello
bar=[
]
make: 'all' is up to date.
所以$(富)功能輸出新行字符。它應該不輸出任何內容,或者應該在變量中捕獲值或者用$(eval)或$(strip)捕獲值。
$(eval a := $(1)) \
導致$(foo)沒有新的行輸出,這就是它解決問題的原因。
替代添加反斜槓到$(FOO)爲:
#1:
define fooBody
$(eval a := $(1))
$(eval b := $(1))
endef
foo = $(strip $(call fooBody,$1,$2))
#2
define fooBody
$(eval a := $(1))
$(eval b := $(1))
endef
foo = $(eval $(call fooBody,$1,$2))
#3
$(strip $(call foo,hello))
#4
$(eval $(call foo,hello))
#5
.:=$(call foo,hello)
我個人的選擇是#1。
如果分配的結果給一個變量你不需要帶或EVAL;對於包含換行符的變量來說很好(確實,'fooBody'已經做過......) – MadScientist
strip和eval用於當函數調用的結果未分配給變量的情況。 –
哦,我明白你的意思了,這個取代了foo而不是foo的調用。嗯。就我個人而言,我不喜歡這樣:它很混亂。我知道它允許你使用'foo'。就我個人而言,我並不是把這種變量加入eval這個全部成語的粉絲;通常的做法是將分配放在'foo'中,然後評估調用的結果。但也許在真正的makefile中它更有意義。 – MadScientist