2016-08-02 21 views
0

a.txta.tar.gzからディレクトリに作成したいとします。一度だけ実行する必要があるメイクファイルのゴール

a.txt: a.tar.gz 
    tar xvf a.tar.gz 

これは動作しますが、一度それを実行した後a.tar.gzは圧縮されていないではありませんし、もう存在しない:私はMakefileの中で、次の目標を書いてみました。その後はmakeが失敗します。 a.txtが存在しないかどうかをチェックする目標をどのように書くことができますか?その場合はtarを実行します。それ以外は何もしませんか?

+1

'tar'は通常、tarファイルを削除したり、解凍されたバージョンを作成したりしません。実行している他のオプションやコマンドはありませんか? – rici

+0

また、 'z'フラグなしでは、' tar'はファイルを正しく解凍することができません(ファイル名の拡張子が間違っていない限り、本当に '.gz'ファイルではありません)。 – tripleee

+0

@treepleee:gnu tarは圧縮フォーマットを自動検出できるので、z(と他の)フラグは通常不要です。 – rici

答えて

0

wildcardは何かに拡大していきます。

どちらのファイルも存在しないが、正確に何をしようとしているのかわからない場合、ルールは失敗します。包括的な解決策を提供するのは難しいです。

0

'test'または '['と ']'はこれを実行できます。

a.txt: $(wildcard a.tar.gz) 
    tar xvmf $< 

が不要なリメイクを避けることができますmフラグを追加する:それは少なくとも1つのファイルを見つけることができるかどうか

a.txt: 
    if [ -e a.tar.gz ]; then \ 
    tar xvf a.tar.gz \ 
    fi 
+0

これは、潜在的に悪いことのように見える、Makeのビューからの依存関係を削除します。 – tripleee

+0

彼は "a.txtが存在しないかどうかをチェックし、そうであればtarを実行しますが、そうでなければ何もしませんか"と書いています。したがって、それ自体は依存*ではありません。 –

関連する問題