Подтвердить что ты не робот

Использование команды подстановочного файла 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% "[email protected]"

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

Однако, когда у меня есть изображение с пробелом в его имени, например Piper PA-28-236 Dakota.JPG, я получаю эту ошибку:

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

Я думаю, что это проблема в команде wildcard, но я не уверен, что изменить, чтобы заставить ее работать.

Как изменить мой make файл, чтобы разрешить пробелы в именах файлов?

4b9b3361

Ответ 1

Как правило, наличие пробелов в именах файлов - это плохая идея с 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% "[email protected]"