GNU make的SECONDEXPANSION和递归

时间:2017-04-11 09:20:20

标签: makefile gnu-make

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

.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 wanted,它会给出:

make: *** No rule to make target `top00.recurse', needed by `wanted'.  Stop.

如果我尝试make works_but_not_wanted,它会给出:

REPORT: top00
REPORT: mid00
REPORT: mid01

这不是我想要的,因为它不报告bottom00,只会因为显而易见的原因而递减一级。但是目标wanted失败了。似乎GNU make在递归行为方面遇到了麻烦。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这是documented behavior

  

链中不会出现多个隐式规则。