Makefile的$(patsubst pattern, replacement, text)
语句中,它在text
的空白分隔单词列表中搜索任何pattern
,并用替换替换它们。但手册上写着
Only the first ‘%’ in the pattern and replacement is treated this way; any subsequent ‘%’ is unchanged.
假设我有test_list := test1 test2
我想从中列出build/test1/test1 build/test2/test2
。因为patsubst只替换第一次出现的内容,所以如果我做$(patsubst %, build/%/%, $(test_list))
,它会给我build/test1/% build/test2/%
。如何制作build/test1/test1 build/test2/test2
?有没有转换所有出现的patsubst的变体?
在这个相当简单的例子中,foreach
应该做你想做的事情:
$(foreach t,$(test_list),build/$(t)/$(t))