2012-12-20 25 views
13

Mam makefile, które mogę używać do kompresji zdjęć:Korzystanie makefile wieloznaczny polecenia dla nazwy plików ze spacjami

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% "[email protected]" 

Compressed/%.JPG: Photos/%.JPG Compressed 
    @echo "Compressing $<" 
    @convert "$<" -scale 20% "[email protected]" 

Jednak kiedy mam obraz z przestrzeni w jego nazwę, na przykład Piper PA-28-236 Dakota.JPG, mam ten błąd:

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

myślę, że jest to problem występujący w poleceniu wildcard, ale nie jestem pewien, co zmienić, aby zmusić go do pracy.

Jak mogę zmodyfikować plik Makefile, aby zezwolić na spacje w nazwach plików?

Odpowiedz

7

Generalnie mając spacji w nazwach plików jest to zły pomysł z marki, ale w Twoim przypadku może to działa:

src=$(shell find Photos/ -iname '*.JPG' | sed 's/ /\\ /g') 

out=$(subst Photos,Compressed,$(src)) 

all : $(out) 

Compressed: 
    @mkdir Compressed 

Compressed/%: Photos/% Compressed 
    @echo "Compressing $<" 
    @convert "$<" -scale 20% "[email protected]" 
+0

Dzięki za pomoc, która działa naprawić spacji problemu wieloznacznych. Zmodyfikowałem go do 'src = $ (powłoka ls Photos | sed 's// \\/g; s /.*/ Photos \/\ 0 /')', aby zezwolić na 'JPG' i' jpg'. Jednak teraz pojawia się błąd 'make: *** Brak reguły dla celu 'Compressed/Piper PA-28-236 Dakota.JPG', wymagany przez" all ". Stop. "Więc teraz muszę wymyślić, jak uzyskać cele ze spacjami do pracy. – iBelieve

+1

Mam go do pracy, dzięki za twoją pomoc. Zastąpienie '' 'rozwiązuje problem celów, ale dodaje' '' w wynikowym pliku. W końcu skorzystałem z funkcji wywołania: 'replace = echo $ (1) | sed 's /?// g'', a następnie użył go za pomocą tego polecenia: '@convert" $ <"-skalowy 20%" \ '$ (wywołanie zamiany, $ @) \" " – iBelieve

+0

Czy mogę zaakceptować twoją odpowiedź lub czy powinienem stworzyć własną odpowiedź, opisującą wszystko, co zrobiłem, aby działała, pokazując końcowy plik Makefile? – iBelieve

Powiązane problemy