makefile对匹配文本的反向引用

时间:2013-04-27 21:32:51

标签: makefile wildcard backreference

假设我有2个文件,彼此依赖:

./pictures/1_data.tex
           |
           V
      ./data/1.pl

因此,1_data.tex是从Perl文件生成的。为此,我在makefile中有以下规则:

./pictures/1_data.tex: ./data/1.pl
    perl given.pl 1 > $@

如果我有多个具有此模式的文件:

./data/1.pl
./data/2.pl
...
./data/n.pl

我想使用通配符来处理它们。我试过这个:

./pictures/*_data.tex: ./data/*.pl
    perl given.pl $* > $@

但它会生成错误的命令:

perl given.pl pictures/1_data > pictures/1_data.tex

是否可以仅对1进行反向引用,而不是对整个目标进行反向引用?正如$*所做的那样。

1 个答案:

答案 0 :(得分:0)

使用模式规则:

all: $(patsubst ./data/%.pl,./pictures/%_data.tex,$(wildcard ./data/*.pl))

./pictures/%_data.tex : ./data/%.pl
        perl given.pl $* > $@