Makefile规则:我应该如何使用修改后的目标名称指定依赖项?

时间:2012-09-25 08:51:49

标签: makefile gnu-make

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

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)

但这不起作用。我该怎么写这种规则?

1 个答案:

答案 0 :(得分: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 $^)

...其中$^将扩展为完整的依赖列表。

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