Makefile GNU make';二次展开与递归

Makefile GNU make';二次展开与递归,makefile,gnu-make,Makefile,Gnu Make,我正试图使用GNU make的SECONDEXPANSION(使用3.81、3.80和更早版本不支持SECONDEXPANSION),如中所述,通过隐式规则递归目标层次结构。层次结构由宏/变量定义: .SECONDEXPANSION : top00.subblocks := mid00 mid01 mid00.subblocks := bottom00 wanted : top00.recurse ; works_but_not_wanted : top00.onelevel ; %.re

我正试图使用GNU make的SECONDEXPANSION(使用3.81、3.80和更早版本不支持SECONDEXPANSION),如中所述,通过隐式规则递归目标层次结构。层次结构由宏/变量定义:

.SECONDEXPANSION :

top00.subblocks := mid00 mid01
mid00.subblocks := bottom00

wanted : top00.recurse ;
works_but_not_wanted : top00.onelevel ;

%.recurse : %.report $$(addsuffix .recurse,$$($$*.subblocks)) ;
%.onelevel : %.report $$(addsuffix .report,$$($$*.subblocks)) ;

%.report :
    @echo REPORT: $*
如果我尝试制作通缉令,它将提供:

make: *** No rule to make target `top00.recurse', needed by `wanted'.  Stop.
REPORT: top00
REPORT: mid00
REPORT: mid01
如果我尝试
make works\u但不想要它
,它会给出:

make: *** No rule to make target `top00.recurse', needed by `wanted'.  Stop.
REPORT: top00
REPORT: mid00
REPORT: mid01
这不是我想要的,因为它没有报告bottom00,因为显而易见的原因,它只会递归一个级别。但是目标
想要的
失败。GNUMake似乎在递归行为方面遇到了问题

有什么建议吗?

这是:

单个隐式规则在链中不能出现多次

这是:

单个隐式规则在链中不能出现多次


谢谢,这很有道理。因此,这甚至与二次膨胀无关。除了要进行的明显递归调用之外,您对基于层次结构定义宏的上述预期递归有什么建议吗?是的,因为二次扩展不会创建新的模式规则。我不明白为什么它不能像那样工作,但要跟踪以前的扩展以确保没有重复,这将是一项重要的工作。谢谢,这是有意义的。因此,这甚至与二次膨胀无关。除了要进行的明显递归调用之外,您对基于层次结构定义宏的上述预期递归有什么建议吗?是的,因为二次扩展不会创建新的模式规则。顺便说一句,我不明白为什么它不能像那样工作,但这将是一些重要的努力,以保持跟踪以前的扩展,以确保没有重复。