Ich habe ein Makefile, mit dem ich Bilder komprimiere:
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% "$@"
Wenn ich jedoch beispielsweise ein Bild mit einem Leerzeichen im Namen habe, wird folgende Piper PA-28-236 Dakota.JPG
Fehlermeldung angezeigt:
make: *** No rule to make target `Compressed/Piper', needed by `all'. Stop.
Ich denke, dies ist ein Problem im wildcard
Befehl, aber ich bin nicht sicher, was ich ändern soll, damit es funktioniert.
Wie ändere ich mein Makefile, um Leerzeichen in Dateinamen zuzulassen?
Antworten:
Ich habe nach Stack Overflow gefragt und ein Benutzer namens perreal hat mir geholfen, dieses Problem zu lösen. Hier ist seine Antwort.
Folgendes habe ich getan, um es zum Laufen zu bringen:
Verwenden Sie
src=$(shell ls Photos | sed 's/ /?/g;s/.*/Photos\/\0/')
diese Option, um das Leerzeichenproblem imwildcard
Befehl zu beheben und Ziele dazu zu bringen, mit Leerzeichen zu arbeiten.Dies hinterlässt ein Fragezeichen in der resultierenden Datei. Verwenden Sie daher eine Aufruffunktion, um sie
?
durch ein Leerzeichen in der endgültigen Datei zu ersetzen :replace = echo $(1) | sed 's/?/ /g'
. Nennen Sie dies mit@convert "$<" -scale 20% "``$(call replace,$@)``"
(Ich habe nur einen Backtick verwendet, aber ich weiß nicht, wie ich ihn richtig anzeigen kann).Also, hier ist mein letztes Makefile:
quelle