21

我正在编写一个 Makefile,我想使用通配符的通用规则,比如

%: bkp/%
    cp $< $@

但我希望这条规则只对少数特定文件有效。我想用列表定义一个变量,例如

file_list = foo.c bar.c zzz.c

并配置规则,使其仅对该变量中列出的文件有效。我怎么做?

4

2 回答 2

29

你想要一个静态模式规则

file_list = foo.c bar.c zzz.c

$(file_list): %: bkp/%
        cp $< $@

语法与您使用的隐式模式规则非常相似。是的,它通常更安全(更可预测)。

于 2010-10-07T03:24:26.897 回答
5

当然,5分钟后我自己找到了答案...... :)

我们需要的是静态模式规则。

http://www.gnu.org/software/make/manual/make.html#Static-Pattern

所以这个例子可以解决

$(file_list) : % : bkp/%
    cp $< $@
于 2010-10-07T03:25:21.627 回答