• 締切済み

makefileでファイルをコピー(更新)する方法

似たような質問がありますが、ちょっと条件が違う(と思う)ので質問させてください。 makeを使って異なるディレクトリに散らばったファイルを一つのディレクトリにコピーしたいと思います。 (条件1)コピー元ディレクトリは、変数SRCDIRSで指定されるものとする。 (条件2)コピー先ディレクトリは、変数DSTDIRで指定されるものとする。 (条件3)コピーすべきファイルは、変数FILESで指定されるものとする。 で、次のようにmakefileを書いてみました。 SRCDIRS = dir-a dir-b dir-c DSTDIR = out-dir FILES = a.c b.c c.c d.c e.c OUTFILES = $(addprefix $(DSTDIR)/ , $(FILES)) all : copyfiles copyfiles : $(OUTFILES) vpath %.c $(SRCDIRS) $(OUTFILES) : %.c : $(notdir %.c) ____cp -u $@ $(DSTDIR)/ こんな感じです。 vpathを指定することで、カレントディレクトリにない%.cファイルはvpathの中から自動的に探してくれることを期待しているのですが、最後の依存関係ルールの書き方では%.cファイルの依存関係が自己参照になっているようで意図したようには解釈されていないようです。 上のような動作をさせるには、どのように書くのが適切でしょうか? なお、SRCDIRSで指定したディレクトリ内に同じ名前のファイルは存在しないものとします。 よろしくお願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

一応確認ですが Make のバージョンは?

回答No.1

確認してないしやり方が全然違うので間違えているかもしれませんが これじゃだめですか? VPATHのなかに重複するファイルがあると破綻してしまいますが 更新されたファイルだけをコピーしてくるはずです。 個人的にはファイルの重複とか考えると find+grep -f +tarで 組み合わせた方が よい気がしますけど。。。 ---- VPATH=dir-a:dir-b:dir-c FILES = a.c b.c c.c d.c e.c DSTDIR=out-dir OUTFILES=$(FILES:%=$(DSTDIR)/%) $(OUTFILES):: $(FILES) cp $? $(DSTDIR)/ ----

関連するQ&A