У меня есть make-файл, который я использую для сжатия изображений:
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
, но я не уверен, что нужно изменить, чтобы заставить ее работать.
Как я могу изменить свой make-файл, чтобы разрешить пробелы в именах файлов?
src=$(shell ls Photos | sed 's/ /\\ /g;s/.*/Photos\/\0/')
, чтобы разрешитьJPG
иjpg
. Однако теперь я получаю сообщение об ошибкеmake: *** No rule to make target 'Compressed/Piper PA-28-236 Dakota.JPG', needed by 'all'. Stop.
Итак, теперь мне нужно выяснить, как заставить работать цели с пробелами. 20.12.2012?
устраняет проблему с целями, но добавляет?
в результирующий файл. В итоге я использовал функцию вызова:replace = echo $(1) | sed 's/?/ /g'
, а затем использовал ее с этой командой:@convert "$<" -scale 20% "`$(call replace,$@)`"
20.12.2012Photos
или удаляю одно из сжатых изображений из каталогаCompressed
, Makefile сжимает ВСЕ изображения, а не только новое или без сжатой версии. 20.12.2012