2016-04-18 21 views
1

これは簡単ですが、それは私を逃しています。ファイル名の異なるファイルのリストをコピーする単一のターゲットを作成するにはどうすればよいですか?ファイルをコピーするターゲットを作成してください

../images/classにあるすべての$(IMG)ファイルを現在のディレクトリにコピーしようとしています。

私はこれを試してみました:

CP := cp 

IMGS := \ 
    A.png \ 
    A.tif \ 
    A.eps \ 
    B.png \ 
    B.tif \ 
    B.eps 

SRC_IMG_DIR := ../images/class 

.SECONDEXPANSION: 
$(IMGS): $$($(SRC_IMG_DIR)/[email protected]) 
    $(CP) -f $^ [email protected] 
+0

これはどういうわけではないのですか? 'make'を実行するとどうなりますか? ... ああなるほど。 –

+0

具体的な詳細なエラーを含む、望ましくない結果は**本当に役立ちます**。 –

答えて

2

は実際にあなただけの最初の場所での二次拡張を使用しようとしている自分自身を混乱しています。これは単純な状況であるため、標準パターンルールの簡単なアプリケーションは、トリックを行います:

% : $(SRC_IMG_DIR)/% 
     $(CP) -f $< [email protected] 

セカンダリ拡張は、より複雑な/トリッキーな問題のためにのみ必要とされます。

1

あなたの問題は、1つのあまりにも多くの時間を拡大しているということです。

あなたは$(SRC_IMG_DIR)ビットは再びその結果を拡大し、二次拡張ミニ相、その後中に拡大されているかの初期解析フェーズと[email protected]ビットの間に拡張されて$(SRC_IMG_DIR)/[email protected])を取っています。

make A.pngの最初の解析結果をA.png A.tif ...: $(../images/class/[email protected])で実行したとします。

ターゲット決意が、その後発生しmakeはそれがA.pngを構築する必要が決定したので、それはA.pngターゲットを見つけ、それが$(../images/class/[email protected])を拡大する必要があると見て、(A.pngである)[email protected]を拡大し、$(../images/class/A.png)を取得し、変数名として../images/class/A.pngを拡大となり、空の前提条件となり、cp -f A.pngが実行されます。あなたが最後の展開がとてもラッピング$(...)ドロップすることを望んでいない

$(IMGS): $(SRC_IMG_DIR)/[email protected] 
関連する問題