Dependencies GNU Make:如何在一个define..endef块中设置两个或多个依赖目标?
我试图在一个GNU Make define..endef块中设置多个依赖项,但我一点运气都没有。如果我将问题归结为一个基本形式,我的目标是最终生成一个如下所示的makefile: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
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的一部分,这是必需的。谢谢,太好了,你是一个明星!:-