У меня есть 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-файл, чтобы в пробелах были указаны пробелы
Ответы:
Я спросил о переполнении стека, и пользователь с именем perreal помог мне решить эту проблему, вот его ответ.
Вот что я сделал, чтобы заставить его работать:
Используется
src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/\0/')
для исправления проблемы пробелов вwildcard
команде и получения целей для работы с пробелами.Это оставляет знак вопроса в полученном файле, поэтому используйте функцию вызова , чтобы заменить
?
пробелом в конечном файле:replace = echo $(1) | sed 's/?/ /g'
. Назовите это с@convert "$<" -scale 20% "``$(call replace,$@)``"
(я использовал только одну обратную черту, но я не знаю, как заставить это отображаться правильно).Итак, вот мой последний Makefile:
источник