2016-08-27 12 views
2

GNU Makeでは、パターンファイル以外のファイルに依存するパターンルールの意味はどういうものですか?GNU非パターンファイルに応じてパターンルールを作る

私は以下のスニペットをMakefileに持っています。 foo.aが存在する場合、make foo.bが呼び出されたときにGNU Makeはfoo.bを作成していないようです。

.SUFFIXES: 

%.b: move_a_to_b.artifact 

move_a_to_b.artifact: 
     mv foo.a foo.b 
     touch move_a_to_b.artifact 

以下は、しかし、正常に動作してfoo.aからfoo.bにファイルを移動します。

.SUFFXIES: 

%.b: %.a 
     mv $< [email protected] 

これがそうであるように、パターンルールとパターンルール

.SUFFIXES: 

%.b: %.intermediate 
     mv $< [email protected] 

%.intermediate: %.a 
     mv $< [email protected] 

答えて

4

に応じて、それは非パターンに応じたパターンルールとは何の関係もありません。それは問題ありません。予想されるセマンティクスがあります。ファイルmove_a_to_b.artifactに関して期限が切れている場合、.bで終わるすべてのファイルについて、レシピが実行されます。

あなたの問題は、パターンルールを定義していないことです。パターンルールを削除しています。パターンルールは常ににレシピが必要です。レシピのないパターンルールはパターンルールを削除します。 Canceling Pattern Rulesを参照してください。

あなたはレシピを追加する必要があり、それが何かを行います:私はそれ以外のパターンの前提条件に応じて、パターンのターゲットとは何かを持っていたと思っ

%.b : move_a_to_b.artifact 
     @echo do something to create [email protected] 
+0

を。しかし、あなたはそうでなければ証明しました。その混乱をクリアしていただきありがとうございます! :-) –

+0

'%.b:move_a_to_b.artifact;'は、明示的に空のレシピに対しても機能します。 –

関連する問題