2016-10-20 6 views
0

特定の.zipファイルをunrarしなければならないmakefileを作成しています。私はそれが特定のフォルダよりも新しいかどうか比較したい。フォルダがzipファイルより古いかどうかを比較します。

フォルダには、これは私が何をすべきかであるすべてのシステムに基づいて別の場所にあるかもしれないので:

.PHONY : install 

install : recipe1 ${COMPONENTS_ROOT}/Model/temp recipe2 
    @echo done 

recipe1: 
    @echo recipe1 

${COMPONENTS_ROOT}/Model/temp : ${COMPONENTS_ROOT}/model/model.zip 
    @echo temp1 
    commands... 
    @echo temp2 

recipe2: 
    @echo recipe2 

は出力:

recipe1 
recipe2 
done 

何のtempフォルダが存在しない場合であっても、私は決して到達しません」 temp1 "と" temp2 "

+0

ようこそ:私のために働いて、このためのよう

、私は次のログを持っています。このような問題を[最小完全な例](http://stackoverflow.com/help/mcve)に減らすことは重要です。例えば、前提条件を削除してもMakeは 'temp'ルールを実行するのに失敗しますか?私はzipファイルがあなたが思っている場所ではないと思っていますが、問題を再現できないかどうかはわかりません。 – Beta

+0

"unrar特定の.zipファイル" - 別のパッカーでzipアーカイブをパックする理由は何ですか? – Olaf

答えて

0

これは私のシステムで動作します(下記参照)。 COMPONENTS_ROOTがあなたが思うものに展開されていることを確認することができます。また、ウィンドウズ上にいる場合は、ディレクトリ名の唯一の違いは大文字と小文字が区別されるため、問題が発生する可能性があります。

あなたがやっていることは、やや誤りがちです。まず、ディレクトリの内容が変化するとディレクトリの日付が変更されるため、ディレクトリの作成時に日付が反映されません。もう1つは、アンカーが実行されているときにユーザーがctrl-cを押すと、アンカーされたディレクトリの半分が問題になる可能性があるということです。

より良い大会には、次のように何かをすることです:

${untar_dir}/.untar_done: ${zip_dir}/file.zip 
    [ ${untar_dir} ] // just to be safe 
    rm -rf ${untar_dir}/* 
    cd ${untar_dir} && tar -xf $^ 
    touch [email protected] 

これはタールが最後untarされた際にマークします一時的な偽のファイルが作成されます。アンカーが完成した場合にのみ存在します。スタックオーバーフローへ

~/tmp/tst1/tst2> more Makefile 
PHONY : install 

COMPONENTS_ROOT=$(shell pwd) 

install : recipe1 ${COMPONENTS_ROOT}/Model/temp recipe2 
     @echo done 

recipe1: 
     @echo recipe1 

${COMPONENTS_ROOT}/Model/temp : ${COMPONENTS_ROOT}/model/model.zip 
     @echo temp1 
     mkdir [email protected] 
     @echo temp2 

recipe2: 
     @echo recipe2 
~/tmp/tst1/tst2> rmdir Model/temp/ 
~/tmp/tst1/tst2> make 
recipe1 
temp1 
mkdir /home/julvr/tmp/tst1/tst2/Model/temp 
temp2 
recipe2 
done 
~/tmp/tst1/tst2> 
関連する問題