2011-01-24 14 views
13

Czy jest możliwe wstawienie nowej linii do wykonania w pętli foreach w pliku Makefile?Dodaj nową linię w pętli Makefile 'foreach'

Obecnie mam następujące:

$(foreach my_lib,$(MY_LIBS),$(call my_func,results,boxer,$(my_lib))) 

Teraz, zakładając, że mam:

MY_LIBS = lib1 \ 
      lib2 

Powyższy foreach pętla będzie oceniać do:

lib1 lib2 

chciałbym to do oceny:

lib1 
lib2 

Czy można to zrobić, wprowadzając znak nowej linii w pętli foreach?

Dziękuję.

+2

Głupi czas Q: dlaczego potrzebujesz nowej linii? –

+0

W moim rzeczywistym Makefile, "m_func" rozszerza "lib1" i "lib2" na polecenia "make ... lib". Zatem jeśli linia zostanie oceniona jako "make ... lib1 make ... lib2", wykonanie nie powiedzie się. – DuneBug

Odpowiedz

25
define \n 


endef 

$(error Here is a message${\n}with embedded${\n}newlines.${\n}${\n}hooray!) 

Można użyć ${\n} w rzeczach jak $(subst...).

+1

To rozwiązało mój problem. Dzięki! – DuneBug

0

Można to zrobić za pomocą

define MY_LIBS 
lib1 
lib2 
endef 

W bardziej złożonych przypadkach, w których chcesz wygenerować multilinii polecenia makefile z pętli, trzeba będzie użyć funkcji eval.

+1

Niestety, makro MY_LIBS jest zdefiniowane w wielu plikach Makefile zawartych w głównym pliku Makefile. Dodajemy do makra MY_LIBS z "+ =" w dołączonych plikach Makefile. W związku z tym nie sądzę, że "definiuj" i "endef" będzie działał dla mnie. Mogę przyjrzeć się, jak użyć "eval", aby rozwiązać ten problem. – DuneBug