2011-01-19 4 views

Odpowiedz

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

Czy na pewno jej $ {} w ostatnim wierszu –

+0

Tak, zdefiniowane tego makra w wierszu 5 '$ {space}' i '$ {}' oba działają dobrze tutaj. – bobbogo

+0

To nie działa dla mnie –

3

To pewnie łatwiej - i czystsze - do użyj funkcji GNU Make shell z sed, aby wykonać zamianę, zamiast próbować zrobić to całkowicie w ramach make.

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

Lub nieco lepiej, jeśli powłoka jest bash zamiast domyślnego sh:

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

Jedynym problemem, jaki napotykam, jest to, że nadal używa poleceń powłoki, co oznacza, że ​​jest zgodny z ARG_MAX, który był moim problemem na pierwszym miejscu. Ale to dobre rozwiązanie innych problemów, które miałem. Dzięki –