18

写真を圧縮するために使用するメイクファイルがあります。

src=$(wildcard Photos/*.jpg) $(wildcard Photos/*.JPG)
out=$(subst Photos,Compressed,$(src))

all : $(out)

clean:
    @rmdir -r Compressed

Compressed:
    @mkdir Compressed

Compressed/%.jpg: Photos/%.jpg Compressed
    @echo "Compressing $<"
    @convert "$<" -scale 20% "$@"

Compressed/%.JPG: Photos/%.JPG Compressed
    @echo "Compressing $<"
    @convert "$<" -scale 20% "$@"

ただし、たとえばPiper PA-28-236 Dakota.JPG、名前にスペースが含まれる画像がある場合、次のエラーが発生します。

make: *** No rule to make target `Compressed/Piper', needed by `all'.  Stop.

これはコマンドの問題だと思いますが、wildcardそれを機能させるために何を変更すればよいかわかりません。

ファイル名にスペースを使用できるようにメイクファイルを変更するにはどうすればよいですか?

4

1 に答える 1

11

一般に、ファイル名にスペースを含めることはmakeでは悪い考えですが、あなたの場合はこれでうまくいくかもしれません:

src=$(shell find Photos/ -iname '*.JPG' | sed 's/ /\\ /g')

out=$(subst Photos,Compressed,$(src))

all : $(out)

Compressed:
  @mkdir Compressed

Compressed/%: Photos/% Compressed
  @echo "Compressing $<"
  @convert "$<" -scale 20% "$@"
于 2012-12-20T01:15:49.547 に答える