GNU Makeパターンルールでワイルドカードを使用する

GNU Makeパターンルールでワイルドカードを使用する

仮定がdoc.pdf目標です。

次のルールは、doc.pdf更新時に再生成をトリガーしますが、doc.referまったく存在しない場合でも満足します。doc.refer

doc.pdf: doc.mom $(wildcard doc.refer)
    pdfmom -e -k < $< > $@

ただし、次のパターンルールは同じことを行いません(PDFを正しく生成しますが、変更時に書き換えをトリガーしませんdoc.refer)。

%.pdf: %.mom Makefile $(wildcard %.refer)
    pdfmom -e -k < $< > $@

文字が拡張される前にwildcardコマンドが実行されるようです。%この問題をどのように解決できますか?

ベストアンサー1

GNU Makeの機能wildcardシェルワイルドカードパターンをインポートし、パターンと一致するファイルに展開します。このパターンには%.referシェルワイルドカードパターンは含まれていません。

あなたは次のようなものが欲しいかもしれません

%.pdf: %.mom %.refer
        pdfmom -e -k < $< > $@

%.pdf: %.mom
        pdfmom -e -k < $< > $@

a がある場合、最初の宛先が呼び出され、PDF ファイルが作成されます。.mom そして.refer文書のデフォルト名として使用できるファイル。使用可能なファイルが存在しない場合、.refer2番目のターゲットが呼び出されます。

これらの目標の順序は重要です。

おすすめ記事