我是Python的try / finally以及各种shell中的内置陷阱命令的忠实粉丝。我有一个Make目标,我想应用相同的逻辑。假设我有这个目标和依赖项:
test : start-server run-test-group-1 run-test-group-2 stop-server
如果在运行测试阶段期间测试失败,则不会执行停止服务器操作。有没有办法保证执行停止服务器操作,即使没有给出“-k”?我意识到我可以在run-test- *操作中的相关命令之前放置“ - ”,但我认为这会导致make以0状态退出,导致控制进程认为测试成功。我仍然希望父进程知道测试失败。
答案 0 :(得分:2)
使用shell陷阱机制代替并以递归方式运行make,也许?像这样:
test:
trap EXIT ERR "$(MAKE) stop-server"; \
$(MAKE) start-server && \
$(MAKE) actual-test
actual-test: run-test-group-1 run-test-group-2