我有一段具有这种结构的makefile:
bob:
ifdef DEBUG
@echo running
endif
@echo chug chug chug
ifdef DEBUG
@echo done
endif
bobit:
@echo "before"
@make bob
@echo "after"
我在这里大大简化了,所有的回声实际上都是不平凡的命令块,还有更多的条件内容,但这抓住了我问题的本质。
出于技术原因,我现在不想进入,我需要摆脱那个 submake,但是因为 echo 代表了不平凡的代码量,我不想只是复制并通过 bob 的主体来代替子制作。
理想情况下,我想做的是这样的
define BOB_BODY
ifdef DEBUG
@echo running
endif
@echo chug chug chug
ifdef DEBUG
@echo done
endif
endef
bob:
$(BOB_BODY)
bobit:
@echo "before"
$(BOB_BODY)
@echo "after"
不幸的是,条件似乎对我不利,它们产生“ifdef:找不到命令”错误,我尝试使用 eval 和 call 的各种组合来解决这个问题,但似乎无法找到让它工作的方法。
我该如何进行这项工作?它甚至是解决问题的正确方法吗?