0
複数のファイルをコピーする必要があります。メイクをしている:GNU makeでファイルをコピーする
FILES=foo.txt d1/bar.dat d2/baz.txt
TARGETDIR=/app
targets=$(addprefix $(TARGETDIR)/,$(FILES))
all: $(targets)
$(targets): $(FILES)
cp $(subst $(TARGETDIR)/,,[email protected]) [email protected]
ファイルが正しくコピーされたが、私はtouch foo.txt
をすれば、3つのすべてのファイルがコピーされます。
私は「正しい方法は、」のような3つのルールを定義することであることを知っている:
$(TARGETDIR)/foo.txt: foo.txt
cp $^ [email protected]
$(TARGETDIR)/d1/bar.dat: d1/bar.dat
cp $^ [email protected]
$(TARGETDIR)/d2/baz.txt: d2/baz.txt
cp $^ [email protected]
をしかし、この場合には、私は一度これらのルールのため、一度all
ルールのため、二回のファイルの名前を記述する必要があります。
前提条件の各名前のルールを「乗算する」方法はありますか?あなたがsecondary expansionを使用する場合は、テキスト操作関数を使用してターゲット名を操作することができます
$(TARGETDIR)/%: $(FILES)
cp $< [email protected]