1

我需要为以下模式编写规则:

SAMPLE1.tsv : SAMPLE1_result23_R1.txt  SAMPLE1_result23_R2.txt
       (do something)

SAMPLE2.tsv : SAMPLE2_result54_R1.txt  SAMPLE2_result54_R2.txt
       (do something)
(...)

我试过类似的东西:

%.tsv: $(wildcard %_*_R1.txt) $(wildcard %_*_R2.txt)
       (do something)

但这不起作用。我应该如何写这种规则?

4

1 回答 1

1

您不能引用%内部 Makefile 函数。您必须单独声明依赖项,或者使用递归 Make,或者生成 Makefile,或者使用不太精确的依赖项声明。

对依赖项进行简单的重构可能是最简单的:

SAMPLE1.tsv: $(wildcard SAMPLE1_*_R1.txt) $(wildcard SAMPLE1_*_R2.txt)
SAMPLE2.tsv: $(wildcard SAMPLE2_*_R1.txt) $(wildcard SAMPLE2_*_R2.txt)
%.tsv:
        (do something with $^)

... where$^将扩展到完整的依赖项列表。

我想您可以进一步重构以进行foreach循环SAMPLE1SAMPLE2但是如果依赖关系如此简单(并且相当稳定,因此您不必一直编辑重复的部分),那就不值得麻烦了。

于 2012-09-25T09:16:42.817 回答