0

DESTmake を使用してファイルをディレクトリにコピーしています。私は次のルールを持っています

$(THUMBS): $(DEST)/% : %
    mkdir -p $(dir $@)
    cp $^ $@

問題は、ソース ファイルが存在しない場合があることです。エラーを生成するのではなく、代わりにプレースホルダー ファイルをコピーします。

実際のソースを中間体として、プレースホルダーを依存関係として追加してみました。この種の作業は機能しましたが、プレースホルダーが更新されると、make は実際のソース ファイルをすべて上書きします。

これを達成するエレガントな方法はありますか?

4

2 に答える 2

0

のファイル$(DEST)が外部で (つまり、make レシピ経由ではなく) ビルドされている場合は、レシピに小さなシェル スクリプトを埋め込むことでこれを行うことができます。

$(THUMBS):
    mkdir -p $(@D)
    for file in $(DEST_FILES); do\
        if [[ -f $file ]]; then\
            cp -f $file $@;\
        else\
            cp -f $(PLACEHOLDER_FILE) $@;\
        fi;\
    done

前提条件としてファイルをリストしていない$(DEST)ため、make はファイルを再構築しようとはしません。PLACEHOLDER_FILE不足しているファイルに使用するプレースホルダ ファイルの名前を設定DEST_FILESし、 に表示されると予想されるファイルのリストを設定する必要がありますDEST。欠点は、前提条件がないと、このルールを実際に再実行する必要がない場合に make が認識できないことです。毎回無条件で実行します。

于 2013-08-16T00:31:16.887 に答える