Tengo un archivo MAKE que utilizo para comprimir imágenes:
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% "$@"
Sin embargo, cuando tengo una imagen con un espacio en su nombre, por ejemplo Piper PA-28-236 Dakota.JPG
, aparece este error:
make: *** No rule to make target `Compressed/Piper', needed by `all'. Stop.
Creo que este es un problema en el wildcard
comando, pero no estoy seguro de qué cambiar para que funcione.
¿Cómo modifico mi archivo MAKE para permitir espacios en los nombres de archivo?
Respuestas:
Pregunté por Stack Overflow y un usuario llamado perreal me ayudó a resolver esto, aquí está su respuesta.
Esto es lo que hice para que funcione:
Se usa
src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/\0/')
para solucionar el problema de espacios en elwildcard
comando y hacer que los objetivos trabajen con espacios.Esto deja un signo de interrogación en el archivo resultante, a fin de utilizar una función llamada a reemplazar
?
con un espacio en el archivo final:replace = echo $(1) | sed 's/?/ /g'
. Llame a esto con@convert "$<" -scale 20% "``$(call replace,$@)``"
(solo utilicé una tecla de retroceso, pero no sé cómo hacer que se muestre correctamente).Entonces, aquí está mi último Makefile:
fuente