0
我試圖使用GNU make的SECONDEXPANSION(使用3.81,3.80和更早版本不支持SECONDEXPANSION),如documentation中所述,通過隱式規則遍歷目標層次結構。層次結構是由宏/變量的定義:GNU make的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 wanted
,它會給:
make: *** No rule to make target `top00.recurse', needed by `wanted'. Stop.
如果我嘗試make works_but_not_wanted
它會給:
REPORT: top00
REPORT: mid00
REPORT: mid01
這不是我想要的,因爲它不是報告最低的,只會出於明顯的原因而降低一級。但目標wanted
失敗。看起來GNU make對遞歸行爲有困難。
有什麼建議嗎?
謝謝,這很有道理。所以,即使不考慮二次擴張。對於基於層次結構定義宏的上述預期遞歸,除了明顯的遞歸調用之外,您是否有任何建議? – Paljas
是的,因爲二次擴展不會創建新的模式規則。我不明白爲什麼它不能這樣工作,但要跟蹤以前的擴展以確保沒有重複是很重要的。 – MadScientist