Tôi có một makefile mà tôi sử dụng để nén hình ảnh:Sử dụng lệnh wildcard makefile cho tên tập tin với không gian
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]"
Tuy nhiên, khi tôi có một bức tranh với một không gian trong tên của nó, ví dụ Piper PA-28-236 Dakota.JPG
, tôi nhận được lỗi này:
make: *** No rule to make target `Compressed/Piper', needed by `all'. Stop.
Tôi nghĩ rằng đây là sự cố trong lệnh wildcard
, nhưng tôi không biết phải thay đổi gì để làm việc đó.
Làm cách nào tôi có thể sửa đổi tệp makefile của mình để cho phép các khoảng trắng trong tên tệp?
Nhờ sự giúp đỡ của bạn, mà làm việc để sửa chữa các khoảng trống trong vấn đề ký tự đại diện. Tôi đã sửa đổi nó thành 'src = $ (shell ls Ảnh | sed 's// \\/g; s /.*/ Ảnh \/\ 0 /')' để cho phép 'JPG' và' jpg'. Tuy nhiên, bây giờ tôi nhận được lỗi 'make: *** Không có quy tắc để thực hiện mục tiêu' Nén/Piper PA-28-236 Dakota.JPG ', cần thiết cho' tất cả '. Stop.' Vì vậy, bây giờ tôi cần phải tìm ra cách để có được mục tiêu với không gian để làm việc. – iBelieve
Tôi đã nhận được nó để làm việc, cảm ơn tất cả sự giúp đỡ của bạn. Thay thế bằng '?' Sửa vấn đề mục tiêu, nhưng thêm một '?' Vào tập tin kết quả. Tôi đã kết thúc bằng cách sử dụng một chức năng gọi: 'replace = echo $ (1) | sed 's /?// g'' và sau đó sử dụng nó với lệnh này: '@convert" $ <"-scale 20%" \ '$ (gọi thay thế, $ @) \' "' – iBelieve
Tôi có nên chấp nhận câu trả lời của bạn không hoặc tôi nên tạo câu trả lời của riêng mình chi tiết tất cả những gì tôi đã làm để làm cho nó hoạt động, hiển thị Makefile cuối cùng? – iBelieve