有没有办法让Make总是在Makefile退出时执行一个动作?

时间:2013-11-12 19:59:25

标签: makefile gnu-make

即使目标规则失败,如何确保make在Makefile退出时执行操作?我希望有类似Perl的END功能。

我的Makefile需要这样做

  • 获得签名票
  • 编译代码,签署一些
  • 发布签名票

所以我的Makefile看起来像这样:

TICKET=$(shell get-ticket)

all: somerule  anotherrule  lastrule

somerule: 
    compile foo
    sign foo --ticket $(TICKET)

anotherrule: more deps etc
    compile bar

lastrule:
    release --ticket $(TICKET)

但是拉斯特勒不会这样做。问题是我无法使用最终目标规则来释放故障单,因为如果出现错误,则不会生成规则。

1 个答案:

答案 0 :(得分:1)

你必须使用递归。像这样:

ifndef TICKET

.DEFAULT:
        @ ticket=`get-ticket` || exit 1; \
          $(MAKE) $@ TICKET="$$ticket"; ret=$$?; \
          release --ticket "$$ticket"; \
          exit $$ret

else

all: somerule anotherrule

  ...etc...

endif