アプリ版:「スタンプのみでお礼する」機能のリリースについて

似たような質問がありますが、ちょっと条件が違う(と思う)ので質問させてください。

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で指定したディレクトリ内に同じ名前のファイルは存在しないものとします。
よろしくお願いします。

A 回答 (2件)

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

    • good
    • 0

確認してないしやり方が全然違うので間違えているかもしれませんが


これじゃだめですか?
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)/
----
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!