2012-03-29 6 views
1

は、一束のファイルを一度に処理する時間がかかります。makefile、複数の入力のルール

基本的に私はこれまでのmakefileの専門家からだけど、私は唯一の2つのファイルを持っているときに素晴らしいことだろうとやって.SULFFIXSを使用するように、これは有効な構文

%.out: %.input1 %.input2 
    merge $<1 $<2 [email protected] 

doit: project.out 
    # project.out merged 

になりたいです二つの入力、または将来の使用のための2つの出力にそれを適応させる...

.SULFFIX: .in.out 
.in.out: 
    dosomething $< [email protected] 
doit: project.out 

GNU私はいくつかのいくつかの出力を持つルールを持っている方法についての議論が、サーバでどれを見つけた3.81

を作りますすべての入力。

答えて

2
%.out: %.input1 %.input2 
    merge $<1 $<2 [email protected] 

makefileのルールには$1$2自動変数はありません、しかし、すべての前提条件のリストです$^があります。ルールには2つの前提条件があるため、%.input1 %.input2、またはより正確には$*.input1 $*.input2に展開されます。したがって、

%.out: %.input1 %.input2 
    merge $^ [email protected] 

で十分です。

.SULFFIXES IMOは、見ることも変更することもできない暗黙的なルール定義を使用するため、あまり役に立ちません。ルールを変更する可能性があるたびに実行するからそれを防ぐために

[更新] doitターゲットに関して

は、するためのコマンド:

doit: project.out 
    # project.out merged 
    touch [email protected] 
+0

良い点は、およそ$を忘れてしまいました^。 ..そして、もし私が命令のために必要なのが最初のものなら何を?私は運が嫌いですか? – gcb

+0

OK、あなたのサンプル$ <は最初のファイルです。全てが予想よりもうまく行った。おかげで – gcb

+0

ハムが、そのパターンで、私は実行されるdoitルールを実行するたびに。 – gcb

関連する問題