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 $^)

...$^依存関係の完全なリストに展開されます。

さらにリファクタリングしてforeachループオーバーSAMPLE1を実行できると思いますがSAMPLE2、依存関係がこれほど単純である場合(そしてかなり安定しているため、繰り返しの部分を常に編集する必要がない場合)、面倒な価値はありません。

于 2012-09-25T09:16:42.817 に答える