我有两个列表,都有 N 个元素:
SRC = a/b/foo a/b/bar a/b/moo
DST = a/c/fii a/c/bir a/c/mee
有没有办法设置一个规则,以
SRC
的第i个元素作为DST
的第i个元素的前提?
我只需要复制,所以我想到的是这样的
the_i-th_element_of_DST: the_i-th_element_of_SRC
cp $< $@
像往常一样,如果目的地已经更新,我希望它不要复制。
不,没有类似的内置功能。你必须施展一些魔法。
这是一个可能有效的示例:
# Create an explicit rule for each destination file
$(DST):
cp $< $@
# Now create a prerequisite relationship between each DST and SRC
# using a recursive user-defined macro
MAKE_PREREQ = $(eval $(firstword $1): $(firstword $2))\
$(call MAKE_PREREQ,$(wordlist 2,$(words $1),$1),$(wordlist 2,$(words $2),$2))
$(call MAKE_PREREQ,$(DST),$(SRC))
(注意我没有测试过)
我相信如果
SRC
或 DST
中的任何文件名包含逗号,这将会失败。