2012-05-13 33 views
14

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) 

Trả lời

14

Các chỉ là một phần khó hiểu ở đây là xác định một không gian đen:

space := 
space += 

SPATHS := /usr/bin/foo /usr/bin/baz /usr/bin/baz 
CPATHS := $(subst $(space),:,$(SPATHS)) 
+7

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

+0

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

+3

Một tùy chọn khác là sử dụng 'không gian: = $ (subst ,,)'. –

Các vấn đề liên quan