我想在退出時執行shell命令,而不管它構建的任何目標。似乎make沒有辦法直接做到這一點。然而,這裏的有使在啓動時執行shell命令,不管目標的一個例子:強制Makefile在構建任何目標之後執行腳本(即將退出之前)
Force Makefile to execute script before building targets
是否有任何類似的黑客已經做出退出前執行shell命令就這一次?我可以將命令放在每個目標的底部,但是a)它會被執行多次,並且b)這是醜陋難以管理的。
我想在退出時執行shell命令,而不管它構建的任何目標。似乎make沒有辦法直接做到這一點。然而,這裏的有使在啓動時執行shell命令,不管目標的一個例子:強制Makefile在構建任何目標之後執行腳本(即將退出之前)
Force Makefile to execute script before building targets
是否有任何類似的黑客已經做出退出前執行shell命令就這一次?我可以將命令放在每個目標的底部,但是a)它會被執行多次,並且b)這是醜陋難以管理的。
由於亞諾什說,沒有內置make來工廠做到這一點。你可以使用他建議的包裝。你也是,如果你願意忍受一些「bleah」,使用遞歸將它推入你的makefile。它看起來像這樣,或許:
ifdef RECURSING
... normal makefile goes here ...
else
.DEFAULT all:
@$(MAKE) RECURSING=true [email protected] ; r=$$? ; \
<extra shell command here>; \
exit $$r
endif
謝謝,我最喜歡這種方法,因爲我可以簡單地輸入make而不必記住執行腳本。 – PonyEars
一個問題:我注意到我被迫輸入'make all'而不是隻能輸入'make'。有沒有辦法來解決這個問題? – PonyEars
當然,只需添加「全部」作爲真正的目標;我會編輯答案。 – MadScientist
我看到的唯一的解決方案是創建一個簡單的傳遞所有參數到make
包裝腳本,然後運行你想要的自定義操作:
#!/bin/sh
make $* && ./custom_script.sh
可能使用包裝器makefile而不是包裝器shell腳本。這就像MadScientist的答案,除了會有兩個makefile而不是一個。 –
謝謝,這是我一直使用的破解,但缺點是,人們不得不記得調用包裝。 – PonyEars
你可以使用兩個makefile,其中一個調用另一個。例如
wrapper.mk:
foo bar:
make -f other.mk [email protected]
@echo finished
.PHONY: foo bar
other.mk:
foo bar:
@echo Building [email protected]
然後運行 「讓-f wrapper.mk富」,wrapper.mk運行other.mk建富。 .PHONY目標表示無論文件是否存在,每次都將目標傳遞給other.mk。
這需要列出wrapper.mk中的所有目標 - 可以通過使用默認規則或匹配任何規則的方法將其列出。
我會補充說,shell腳本封裝解決方案更簡單,不太可能中斷。 –
你的用例是什麼? – JesperE
我需要將退出make過程時釋放的共享資源標記爲已釋放(我通過使用我的問題中的鏈接中顯示的方法將makefile文件啓動時標記爲busy)。 – PonyEars