15
A
回答
19
有几种技术有代码执行的目标是前建成。你应该选择哪一个取决于你想要做什么,以及你为什么要这样做。 (zsh脚本是做什么的?你为什么要执行它?)
你可以像@约翰建议的那样做;将zsh脚本作为第一个依赖项。您应该将zsh
目标标记为.PHONY
,除非它实际上生成名为zsh
的文件。
另一种解决方案(在GNU作出,至少)是调用$(shell ...)
用作变量赋值的一部分:
ZSH_RESULT:=$(shell zsh myscript.zsh)
这将一旦生成文件被解析执行脚本,并且前任何目标被执行。如果您递归调用makefile,它也会执行脚本。
9
只是要了其他目标之一的扶养
foo.obj : zsh foo.c
rule for compileing foo.c
zsh:
rule for running zsh script.
或替代,使你的第一个目标依赖于它
goal: zsh foo.exe
+2
这里的第一个解决方案的问题是,即使foo.c没有被更新,它也会强制每次重建foo.obj。第二个问题是现在你不能用多个目标调用你的makefile。 – 2015-02-18 21:48:23
2
使用MAKECMDGOALS和双冒号规则在makefile中进行预处理和后处理的解决方案。
MAKECMDGOALS是在命令行中列出的目标。
第一步是从命令行获取第一个和最后一个目标, 或者如果没有列出目标,请使用默认目标。
ifneq ($(MAKECMDGOALS),)
FIRST_GOAL := $(word 1, $(MAKECMDGOALS))
LAST_GOAL := $(word $(words $(MAKECMDGOALS)), $(MAKECMDGOALS))
else
FIRST_GOAL := all
LAST_GOAL := all
endif
双冒号规则允许按顺序执行相同目标的多个配方。您必须更改所有命令行目标以加倍冒号规则。
#Dummy rule to set the default
.PHONY: all
all ::
#Preprocessing
$(FIRST_GOAL) ::
echo "Starting make..."
all :: normal_prerequistes
normal_recipe
other_stuff
#Postprocessing
$(LAST_GOAL) ::
echo "All done..."
相关问题
- 1. MSBuild目标构建之前不执行
- 2. 构建脚本到Makefile
- 3. 在锚标记之前强制执行尾部斜杠
- 4. 在60秒之前执行脚本
- 5. Flex:在构建之前/之后运行脚本?
- 6. 获得CMake在构建库之前执行项目中的目标
- 7. 是否有可能在构建之前强制Xcode项目进行清理?
- 8. 如何在编译之前告诉automake生成的Makefile执行脚本?
- 9. 如何在JavaScript中强制执行下一行之前的行?
- 10. 强制GNU make执行特定目标
- 11. &&在&&之前执行语句时强制执行语句&&为false前的语句
- 12. Body onload脚本在PHP脚本之前执行
- 13. 在每个php脚本之前执行php脚本?
- 14. 在构建Xcode之前运行一个shell脚本
- 15. 需要在编译/构建之前运行自定义脚本
- 16. 如何在Xcode每次构建之前运行Python脚本?
- 17. 在做好准备之前强制制定目标
- 18. 寻找一个Xcode构建脚本在目标之间复制文件
- 19. 使用Makefile执行Python脚本
- 20. 构建失败而执行Ant脚本
- 21. Makefile - 构建所有可能的目标
- 22. 构建makefile中的多个目标
- 23. 在TFS检查之前强制执行测试
- 24. 强制vba在继续之前等待sql查询执行
- 25. 在异常处理之前强制执行函数(JAVA)
- 26. Mercurial:在“hg commit”之前强制执行“hg pull -u”
- 27. Makefile只执行第一个目标
- 28. Makefile问题 - 不执行目标命令
- 29. 运行构建脚本,而不是建立一个目标
- 30. 在构建依赖关系之前在makefile中回声
请注意,即使make给出-n,--just -print,--dry-run,--recon选项,'$(shell ...)'也会运行。 – thejoshwolfe 2011-07-26 03:00:38
很好的答案。有什么方法可以在退出make时运行命令?在这里发布一个问题:http://stackoverflow.com/questions/20582006/force-makefile-to-execute-script-after-building-any-target-just-before-exiting – PonyEars 2013-12-14 10:15:12