0

即使目标规则失败,如何确保 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)

但 lastrule 不会。问题是我不能使用最终目标规则来释放票证,因为如果出现错误,则不会制定规则。

4

1 回答 1

1

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

ifndef TICKET

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

else

all: somerule anotherrule

  ...etc...

endif
于 2013-11-12T20:05:39.430 回答