对包含空格的文件名使用makefile wildcard命令

iBe*_*eve 14 makefile

我有一个用于压缩图片的makefile:

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% "$@"
Run Code Online (Sandbox Code Playgroud)

但是,当我在其名称中有一个空格的图片时Piper PA-28-236 Dakota.JPG,我收到此错误:

make: *** No rule to make target `Compressed/Piper', needed by `all'.  Stop.
Run Code Online (Sandbox Code Playgroud)

我认为这是wildcard命令中的一个问题,但我不确定要改变它以使其工作.

如何修改我的makefile以允许文件名中的空格?

per*_*eal 8

通常在文件名中包含空格对于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% "$@"
Run Code Online (Sandbox Code Playgroud)