Dependencies GNU Make:如何在一个define..endef块中设置两个或多个依赖目标?

Dependencies GNU Make:如何在一个define..endef块中设置两个或多个依赖目标?,dependencies,user-defined-functions,gnu-make,Dependencies,User Defined Functions,Gnu Make,我试图在一个GNU Make define..endef块中设置多个依赖项,但我一点运气都没有。如果我将问题归结为一个基本形式,我的目标是最终生成一个如下所示的makefile: all: CPU1 CPU2 CPU1: Build_CPU1 CPU2: Build_CPU2 Build_CPU1: @echo Building CPU #1 Build_CPU2: @echo Building CPU #2 如果我试图将两个中间依赖项放在define..e

我试图在一个GNU Make define..endef块中设置多个依赖项,但我一点运气都没有。如果我将问题归结为一个基本形式,我的目标是最终生成一个如下所示的makefile:

all:    CPU1    CPU2

CPU1: Build_CPU1

CPU2: Build_CPU2

Build_CPU1:
    @echo Building CPU #1

Build_CPU2:
    @echo Building CPU #2
如果我试图将两个中间依赖项放在define..endef块中,就会出现问题:

all:    CPU1    CPU2

define DoBuild =
CPU1:   Build_CPU1



CPU2:   Build_CPU2



endef

$(call DoBuild)

Build_CPU1:
    @echo Building CPU #1

Build_CPU2:
    @echo Building CPU #2
如果我在define..endef块中的两个:-依赖项行(即CPU1:Build_CPU1和CPU2:Build_CPU2)后面都放一个空换行符,GNU Make会抱怨***目标模式不包含“%”。但是,如果我在两个依赖项之后添加一个空格,然后换行,那么错误消息就会消失

然而,在使用空格和换行符遵循了两条依赖关系之后,GNU Make抱怨了***多目标模式

我非常确定的是GNU Make正在将define..endef块的所有行折叠成一行:当然,一行不能有多个冒号

根据GNU Make manual 6.8定义多行变量,您应该能够通过使用两条新行在define..endef块内强制换行。然而,问题似乎在于,这最终定义了一个变量,因此被解析为一行,即使它包含换行符。我想这就是为什么要把两个依赖项压缩成一行,把两个冒号放在一行上,所以我基本上没什么想法了-

有没有办法说服GNU Make在一个define..endef块中定义两个或多个依赖目标


PS:我正在使用GNU Make 4.2.1,下面是一个工作示例:

all: CPU1 CPU2

define DoBuild # No equal sign is needed.
CPU1: Build_CPU1
    @echo $$@
CPU2: Build_CPU2
    @echo $$@
endef

$(eval $(call DoBuild)) # Use eval.

Build_CPU1:
    @echo $@

Build_CPU2:
    @echo $@

注意,调用返回一个字符串。要使该字符串成为makefile的一部分,这是必需的。

谢谢,太好了,你是一个明星!:-