Cho một danh sách thư đại tràng được phân định các đường dẫn, nhận được một danh sách không gian được phân định với GNU Make là đơn giản:GNU Make Chuyển đổi Spaces để Dấu hai chấm
CPATHS := /usr/bin/foo:/usr/bin/baz:/usr/bin/baz
SPATHS := $(subst :, ,$(CPATHS))
Tuy nhiên, tôi không thể tìm thấy một cách tốt đẹp để đi theo hướng ngược lại. Các hack sau đây không hoạt động (ít nhất là nếu sed được cài đặt) nhưng tôi khá chắc chắn sẽ có một cách tốt hơn để giải quyết điều này chỉ bằng cách sử dụng Thực hiện các chức năng nội bộ của.
SPATHS := /usr/bin/foo /usr/bin/baz /usr/bin/baz
CPATHS := $(shell echo $(SPATHS) > tmp; sed 's/ \+/:/g' tmp; rm tmp)
Tôi thích sử dụng 'trống: =' sau đó 'không gian: = $ (trống) $ (trống) '. Chỉ rõ ràng hơn một chút và không dựa vào tác dụng phụ. Nhưng cả hai sẽ làm việc. – MadScientist
Tuyệt vời, cảm ơn. Tôi nghĩ rằng tôi sẽ sử dụng 'SPACE: = $ (eval) $ (eval)' để có được một dấu cách. Tôi đã nghĩ rằng 'subst' hoạt động trên các từ riêng lẻ và do đó không nhìn thấy khoảng trống giữa chúng. – 5gon12eder
Một tùy chọn khác là sử dụng 'không gian: = $ (subst ,,)'. –