Utilizzo del comando jolly makefile per i nomi di file con spazi


8

Ho un makefile che uso per comprimere le immagini:

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% "$@"

Tuttavia, quando ho una foto con uno spazio nel suo nome, ad esempio Piper PA-28-236 Dakota.JPG, ottengo questo errore:

make: *** No rule to make target `Compressed/Piper', needed by `all'.  Stop.

Penso che questo sia un problema nel wildcardcomando, ma non sono sicuro di cosa cambiare per farlo funzionare.

Come posso modificare il mio makefile per consentire spazi nei nomi dei file?


Ho fatto questa domanda su Stack Overflow qui .
iBelieve,

Risposte:


4

Ho chiesto su Stack Overflow e un utente di nome perreal mi ha aiutato a risolvere questo problema, ecco la sua risposta.

Ecco cosa ho fatto per farlo funzionare:

  1. Utilizzare src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/\0/')per correggere il problema degli spazi nel wildcardcomando e far sì che gli obiettivi lavorino con gli spazi.

  2. Questo lascia un punto interrogativo nel file risultante, in modo da utilizzare una funzione chiamata per sostituire ?con uno spazio nel file finale: replace = echo $(1) | sed 's/?/ /g'. Chiamalo con @convert "$<" -scale 20% "``$(call replace,$@)``"(ho usato solo un backtick, ma non so come farlo visualizzare correttamente).

Quindi, ecco il mio Makefile finale:

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,$@)`"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.