Используя make-файл подстановочный знак управляют для имен файлов с пробелами

У меня есть 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-файл для обеспечения пробелов в именах файлов?

8
задан 20 December 2012 в 03:29

1 ответ

Я спросил относительно Переполнения стека, и названный perreal пользователя помог мне решить это, вот его ответ.

Вот то, что я сделал, чтобы заставить это работать:

  1. Использовать src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/\0/') решить проблему пробелов в wildcard управляйте и заставьте цели работать с пробелами.

  2. Это оставляет вопросительный знак в получающемся файле, так используйте функцию вызова для замены ? с пространством в заключительном файле: replace = echo $(1) | sed 's/?/ /g'. Назовите это с @convert "$<" -scale 20% "``$(call replace,$@)``" (Я только использовал одну обратную галочку, но я не знаю, как заставить ее отображаться правильно).

Так, вот мой заключительный Make-файл:

src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/\0/')
out=$(subst Photos,Compressed,$(src))

replace = echo $(1) | sed 's/?/ /g'

all : $(out)

clean:
    @rmdir -r Compressed

Compressed:
    @mkdir Compressed

Compressed/%.jpg: Photos/%.jpg Compressed
    @echo "Compressing $<"
    @convert "$<" -scale 20% "`$(call replace,$@)`"

Compressed/%.JPG: Photos/%.JPG Compressed
    @echo "Compressing $<"
    @convert "$<" -scale 20% "`$(call replace,$@)`"
4
ответ дан 20 December 2012 в 03:29

Другие вопросы по тегам:

Похожие вопросы: