2011-01-24 108 views
13

是否可以在Makefile中的foreach循环中插入要执行的新行?在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时间:你为什么需要换行符? – 2011-01-24 23:20:48

+0

在我的实际Makefile中,“m_func”将“lib1”和“lib2”扩展为“make ... lib”命令。因此,如果该行被评估为“make ... lib1 make ... lib2”,那么执行失败。 – DuneBug 2011-01-25 00:08:55

回答

25
define \n 


endef 

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

您可以使用的东西像${\n}$(subst...)

0

您可以通过使用

define MY_LIBS 
lib1 
lib2 
endef 

在更复杂的情况下,如果你想生成从环多的Makefile命令做到这一点,你就需要使用eval功能。

+1

不幸的是,MY_LIBS宏是在包含在根Makefile中的多个Makefile中定义的。我们在包含的Makefiles中使用“+ =”添加到MY_LIBS宏。因此,我认为“定义”和“功能”不适合我。我可以更多地关注如何使用“eval”来解决这个问题。 – DuneBug 2011-01-25 00:10:37