【问题标题】:makefile backreference to matched textmakefile 反向引用匹配的文本
【发布时间】:2013-04-27 21:32:51
【问题描述】:

假设,我有 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 进行反向引用,而不是对整个目标进行反向引用?正如$* 所做的那样。

【问题讨论】:

    标签: makefile wildcard backreference


    【解决方案1】:

    使用模式规则:

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

    【讨论】:

    • 使用% 符号代替* 有帮助,现在$* 包含必要的数据。
    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2012-12-20
    相关资源
    最近更新 更多