如何指示Make将一个列表的第i个文件复制到另一个列表的第i个路径?

问题描述 投票:0回答:1

我有两个列表,都有 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 $< $@

像往常一样,如果目的地已经更新,我希望它不要复制。

makefile gnu-make
1个回答
0
投票

不,没有类似的内置功能。你必须施展一些魔法。

这是一个可能有效的示例:

# 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
中的任何文件名包含逗号,这将会失败。

© www.soinside.com 2019 - 2024. All rights reserved.