可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'd like to execute a shell command when make exits, regardless of whatever target it built. Seems like make doesn't have a way to do this directly. However, here's an example of having make execute a shell command upon startup, regardless of the target:
Force Makefile to execute script before building targets
Is there any similar hack have make execute a shell command once just before exiting? I could put the command at the bottom of every target, but a) it would get executed multiple times, and b) that is ugly and difficult to manage.
回答1:
As janos says, there is no facility built into make to do it. You can use a wrapper such as he suggests. You an also, if you're willing to live with some amount of "bleah", push that into your makefile using recursion. It would look something like this, perhaps:
ifdef RECURSING ... normal makefile goes here ... else .DEFAULT all: @$(MAKE) RECURSING=true $@ ; r=$$? ; \ <extra shell command here>; \ exit $$r endif
回答2:
The only solution I see is to create a wrapper script that simply passes all arguments to make
and then runs the custom action you want:
#!/bin/sh make $* && ./custom_script.sh
回答3:
You could use two makefiles, one of which calls the other. For example
wrapper.mk:
foo bar: make -f other.mk $@ @echo finished .PHONY: foo bar
other.mk:
foo bar: @echo Building $@
Then running "make -f wrapper.mk foo", wrapper.mk runs other.mk to build foo. The .PHONY target means that the targets will be passed to other.mk for consideration everytime regardless of whether the files exist or not.
This requires listing all your targets in wrapper.mk - there may be ways round this using default rules or match-anything rules.