0

ターゲット ルールが失敗した場合でも、Makefile の終了時に make が確実にアクションを実行するようにするにはどうすればよいですか? 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 に答える