【问题标题】:Add a newline in Makefile 'foreach' loop在 Makefile 'foreach' 循环中添加换行符
【发布时间】:2011-01-24 23:11:48
【问题描述】:

是否可以在 Makefile 的 foreach 循环中插入要执行的换行符?

目前,我有以下内容:

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

现在,假设我有:

MY_LIBS = lib1 \
          lib2

上述foreach 循环的计算结果为:

lib1 lib2

我希望将其评估为:

lib1
lib2

是否可以在foreach 循环中插入换行符来完成此操作?

谢谢。

【问题讨论】:

  • 傻Q时间:为什么需要换行符?
  • 在我实际的 Makefile 中,“m_func”将“lib1”和“lib2”扩展为“make ... lib”命令。因此,如果该行被评估为“make ... lib1 make ... lib2”,则执行失败。

标签: makefile


【解决方案1】:
define \n


endef

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

您可以在$(subst...) 等内容中使用${\n}

【讨论】:

    【解决方案2】:

    你可以使用

    define MY_LIBS
    lib1
    lib2
    endef
    

    在更复杂的情况下,如果您想从循环中生成多行 makefile 命令,则需要使用 eval 函数。

    【讨论】:

    • 不幸的是,MY_LIBS 宏是在包含在根 Makefile 中的多个 Makefile 中定义的。我们在包含的 Makefile 中使用“+=”添加到 MY_LIBS 宏。因此,我认为“define”和“endef”对我不起作用。我可以更多地研究如何使用“eval”来解决这个问题。
    猜你喜欢
    • 2015-06-21
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多