Uso del comando comodín makefile para nombres de archivos con espacios

8

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 wildcardcomando, pero no estoy seguro de qué cambiar para que funcione.

¿Cómo modifico mi archivo MAKE para permitir espacios en los nombres de archivo?

Yo creo
fuente
He hecho esta pregunta sobre Stack Overflow aquí .
iBelieve

Respuestas:

4

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:

  1. Se usa src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/\0/')para solucionar el problema de espacios en el wildcardcomando y hacer que los objetivos trabajen con espacios.

  2. 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:

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,$@)`"
Yo creo
fuente