我需要为以下模式编写规则:
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)
但这不起作用。我该怎么写这种规则?
答案 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
循环SAMPLE1
和SAMPLE2
但是如果依赖这么简单(并且相当稳定,那么你不必一直编辑重复的部分),这不值得麻烦。