2011-01-19 25 views

Trả lời

19
text := hello a b c 

null := 
space := ${null} ${null} 
${space} := ${space}# ${ } is a space. Neat huh? 

define \n 


endef 

$(error [$(subst ${ },${\n},${text})]) 
+0

Bạn có chắc chắn $ của nó {} trong dòng cuối cùng –

+0

Vâng, tôi định nghĩa macro này trong dòng 5 '$ {space}' và '$ {}' đều hoạt động tốt ở đây. – bobbogo

+0

Nó làm việc cho tôi –

3

Đó là lẽ dễ dàng hơn - và sạch hơn - để sử dụng chức năng shell của GNU Make với sed để thực hiện việc thay thế, thay vì cố gắng thực hiện hoàn toàn trong phạm vi make.

STRING := foo bar baz 
SPLIT := $(shell echo "${STRING}" | sed -e 's/ /\n/g') 

Hoặc, tốt hơn một chút, nếu vỏ của bạn là bash thay vì mặc định sh:

STRING := foo bar baz 
SPLIT := $(shell sed -e 's/ /\n/g' <<< ${STRING}) 
+0

Vấn đề duy nhất tôi tìm thấy với điều này là nó vẫn sử dụng các lệnh shell có nghĩa là nó tuân thủ ARG_MAX đó là vấn đề của tôi ở vị trí đầu tiên. Nhưng đó là một giải pháp tốt cho những vấn đề khác mà tôi có. Cảm ơn –

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