0

ソースディレクトリからターゲットディレクトリにファイルをコピーしたいと思います。そして、変更されていないファイルをコピーすることは避けたいと思います。したがって、%.:%.ルールを使用して新しいファイルをチェックするmake機能を利用しようとしています。

この場合、ソースとターゲットの EXTENSION は同じです。オブジェクト ファイルは別の場所にありますが、グラフィック アセット用ではありません。

私はmake画像をコピーするために使用します。

TARGET := target

SOURCE := source
GRAPHICS := $(foreach dir,$(SOURCE), $(wildcard $(dir)/*.jpg ) $(wildcard $(dir)/**/*.jpg ) $(wildcard $(dir)/*.png ) $(wildcard $(dir)/**/*.png ) $(wildcard $(dir)/*.gif ) $(wildcard $(dir)/**/*.gif )  )

JPG = $(GRAPHICS:.jpg=.tmp)
PNG = $(GRAPHICS:.png=.tmp)
GIF = $(GRAPHICS:.gif=.tmp)

次に、次のルールを使用して、ファイルをターゲット ディレクトリにコピーします。

%.tmp:%.jpg
    find $< | cpio -p -d -v $(TARGET)

質問

  1. ここでTARGETディレクトリを文字列で置き換えることは可能ですか
  2. それによって、make newer 機能を使用しますか?

私は試した

 JPG = $(GRAPHICS:$(TARGET).jpg=.tmp)

しかし、それは失敗しNo rule to make targetます。同じディレクトリ内のソースとオブジェクトを比較することしかできませんか?

ソースとオブジェクトが同じ拡張子であるようなルールを作成できますか?

%.jpg:%.jpg

私が思いつくことができる最も近いものは次のとおりです。

$(TARGET)%.jpg:%.jpg

しかし、それは実行されません。掃除後も。

4

2 に答える 2

0

これが解決策です。

この「設定」はそのままです。

TARGET := target

SOURCE := source GRAPHICS := $(foreach dir,$(SOURCE), $(wildcard $(dir)/*.jpg ) 
$(wildcard $(dir)/**/*.jpg ) $(wildcard $(dir)/*.png ) $(wildcard $(dir)/**/*.png ) 
$(wildcard $(dir)/*.gif ) $(wildcard $(dir)/**/*.gif )  )

$GRAPHICS 文字列のすべての (スペースで区切られた) 値にプレフィックスを追加します。

TARGET_GRAPHICS := $(addprefix $(TARGET)/, $(GRAPHICS) )
  • patsubst aka -- TARGET_GRAPHICS := $(patsubst %, $(TARGET)/%, $(GRAPHICS) )-- は最初のエントリに対してのみ機能することに注意してください。おそらく私はそれを間違ってやっていました。

ファイルの種類ごとにパターン マッチを提供します。ここであなたが望むことは何でもしてください。私の場合、入力をターゲット ディレクトリにコピーします。cpio は必要なディレクトリを作成します。cp -p も必要に応じて機能する場合があります。

$(TARGET)/%.jpg : %.jpg 
     @echo "--- .jpg copying " $< " to " $@ " into dir " $(<D)
     @find $< | cpio -p -d -v $(TARGET)


$(TARGET)/%.png : %.png 
    @echo "--- .png copying " $< " to " $@
    @find $< | cpio -p -d -v $(TARGET)

$(TARGET)/%.gif : %.gif
@echo "--- .gif Copying " $< " to " $@
@find $< | cpio -p -d -v $(TARGET)
于 2013-01-05T19:53:28.887 に答える