2011-01-24 2 views
13

Можно ли вставить новую строку, которая будет выполнена в цикле foreach в Makefile?Добавить новую строку в цикле Makefile 'foreach'

В настоящее время у меня есть следующие:

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

Теперь, если предположить, что у меня есть:

MY_LIBS = lib1 \ 
      lib2 

выше foreach цикл будет вычисляться:

lib1 lib2 

Я хотел бы это для оценки:

lib1 
lib2 

Можно ли вставить новую строку в петлю foreach, чтобы выполнить это?

спасибо.

+2

Глупое время Q: зачем нужна новая линия? –

+0

В моем фактическом Makefile «m_func» расширяет «lib1» и «lib2» в команды «make ... lib». Таким образом, если строка оценивается как «make ... lib1 make ... lib2», то выполнение не выполняется. – DuneBug

ответ

25
define \n 


endef 

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

Вы можете использовать ${\n} в вещах как $(subst...).

+1

Это решило мою проблему. Благодаря! – DuneBug

0

Вы могли бы сделать это с помощью

define MY_LIBS 
lib1 
lib2 
endef 

В более сложных случаях, когда требуется создать многострочные команды Makefile из цикла, вам нужно будет использовать функцию eval.

+1

К сожалению, макрос MY_LIBS определен в нескольких файлах Makefile, которые включены в корневой файл Makefile. Мы добавляем к макросу MY_LIBS с «+ =» в включенных Makefiles. Таким образом, я не думаю, что «define» и «endef» будут работать для меня. Я могу больше узнать, как использовать «eval» для решения этой проблемы. – DuneBug

Смежные вопросы