makefile出现错误却不停止,却继续运行
原文地址:http://www.crifan.com/makefile_not_stop_on_error/
【问题】
写了个makefile:
#goto every sub foler(single book)'s src dir to do 'make xxx' action
clean clean_all clean_release all release release_copy:@echo "Current path="`pwd`;@echo "LS_OUTPUT="$(LS_OUTPUT);for each_item in $(LS_OUTPUT); \do \if [ -d $$each_item/src ]; then \cd $$each_item/src && \echo `pwd` && \if [ -f Makefile ]; then \make $@; \fi; \cd ../..; \fi; \done;
然后对应的src中的子makefile中,是去执行对应的动作。
比如执行make release_copy,其会对于每一个子文件夹去执行此make release_copy。
现在问题是,对于某个子文件夹下面,单独执行make release_copy,是会出现错误,并且makefile会正常的停止继续执行的。
但是对于顶层的去执行makefile release_copy的话,其虽然也同样显示错误,但是却会继续执行后续的动作。
【解决过程】
1。默认makefile遇到错误就会停止,对于此处却失效了。所以很是悲剧。
2.到网上找资料,找到这个9.6 Testing the Compilation of a Program,其中倒是有关于想要在出错的时候,仍然让其继续运行,有解释,即用-k参数。
但是我此处就是已经有了此现象了,想不让其遇到错误却继续运行,但是却没有相应的参数可以用。
3.后来找到:Re: question on makefile: not stop after compling error,其指出了原因,并给出了解决方法,
那是因为对于子makefile执行的结果,没有判断返回值,所以导致子makefile错误的时候,其实是停止了,然后返回错误值了,但是上层的makefile却没有判断返回值,导致会继续执行,所以表现形式就是虽然makefile执行过程中出错,但是却还是继续运行。
然后照葫芦画瓢去改为:
#goto every sub foler(single book)'s src dir to do 'make xxx' action
clean clean_all clean_release all release release_copy:@echo "Current path="`pwd`;@echo "LS_OUTPUT="$(LS_OUTPUT);for each_item in $(LS_OUTPUT); \do {\if [ -d $$each_item/src ]; then \cd $$each_item/src && \echo `pwd` && \if [ -f Makefile ]; then \make $@; \fi; \cd ../..; \fi; \} || exit "$$?";\done;
结果问题依旧,遇到错误,还是继续运行。
然后注意到,是需要在对子makefile返回值做判断,所以又改为:
#goto every sub foler(single book)'s src dir to do 'make xxx' action
clean clean_all clean_release all release release_copy:@echo "Current path="`pwd`;@echo "LS_OUTPUT="$(LS_OUTPUT);for each_item in $(LS_OUTPUT); \do \if [ -d $$each_item/src ]; then \cd $$each_item/src && \echo `pwd` && \if [ -f Makefile ]; then \make $@ || exit "$$?"; \fi; \cd ../..; \fi; \done;
如此,就可以了,遇到错误,就会停止了。
【总结】
makefile执行错误,结果还会继续执行,此处是由于是上层makefile调用下层子makefile,子makefile执行出错,停止返回到上层后,上层没有判断返回值,导致还是会继续执行。
解决办法是,对于子makefile调用,判断返回值,
比如将:
make $@;
改为:
make $@ || exit "$$?";
这样make执行错误返回值为非0,然后就可以执行后面的exit而退出了。
makefile出现错误却不停止,却继续运行相关推荐
- makefile:2: *** 遗漏分隔符 。 停止
我们在编写完makefile,然后在终端中 $make 出现"makefile:2: *** 遗漏分隔符 . 停止."问题,原因是在编写makefile文件时: all: ...
- 关于 “Makefile:3:***遗漏分隔符。停止 。”解决方法二
下面时装自他人的: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 我编写makefile ...
- 水晶报表提示“出现打印错误。将停止打印”的原因,非page_Init
在水晶报表安装完printControl.cab后,弹出选择打印机的界面后,点确定按钮提示"出现打印错误.将停止打印",这可把我郁闷了,到网上一搜,无法就是page_Init里也需 ...
- 修复:“ Windows进程激活服务(WAS)由于遇到错误而正在停止。”
I'm not yet clear what I did, but I'm blogging it so it can be found if someone else has this issue. ...
- Makefile常见错误解析 - make: *** No rule to make target 'test1.o', needed by 'test2'. Stop
Makefile常见错误解析 - make: *** No rule to make target 'test1.o', needed by 'test2'. Stop 最常见的可能是没有正确书写te ...
- QT出现[Makefile]:error2错误
在Linux系统中移植QT程序出现[Makefile]:error2错误 经检查是文件目录中存在()/等特殊符号或中文 更改名称后运行通过
- 腾讯面试官:如何停止一个正在运行的线程?我蒙了。。。
以下文章来源方志朋的博客,回复"666"获面试宝典 停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作.停止一个线程可以用Thread.stop()方法, ...
- 面试官:如何停止一个正在运行的线程?我一脸蒙蔽...
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:cnblogs.com/greta/p/5624839.ht ...
- 如何停止一个正在运行的线程?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | cnblogs.com/greta/p/562 ...
最新文章
- Linux中/etc/resolv.conf文件简析
- 自定义边界_如何批量生成CAD填充的边界?
- linux系统启动级别
- ActiveMQ activemq web管理界面介绍
- [Window] .MUS 0x80070422 Error
- [云炬创业管理笔记]第三章打造优秀创业团队讨论4
- AOJ 0525 Osenbei【穷竭搜索】
- (23)FPGA锁存器与缓冲器的区别
- 三星手机真假测试软件,#三星EVO Plus MicroSD存储卡# 火眼金睛识真伪、评测软件测性能...
- matlab车牌倾斜校正,求做车牌倾斜校正程序。
- app.use()方法详解
- Linux搭建LAMP、LNMP环境;论坛的搭建;
- 洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树
- 如何在Windows中将“显示桌面”图标移动到快速启动栏或任务栏
- git删除所有文件夹(清空远程仓库)
- android app生涯
- 蛋白质界的 ChatGPT:AlphaFold1 论文必备知识,不会有人还不知道吧
- 微信如何群发不封号?
- windows API 钩子
- 计算机分屏解决方案,多屏显示解决方案