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?
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
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
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