原文地址: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出现错误却不停止,却继续运行相关推荐

  1. makefile:2: *** 遗漏分隔符 。 停止

    我们在编写完makefile,然后在终端中 $make 出现"makefile:2: *** 遗漏分隔符 . 停止."问题,原因是在编写makefile文件时: all:      ...

  2. 关于 “Makefile:3:***遗漏分隔符。停止 。”解决方法二

    下面时装自他人的: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 我编写makefile ...

  3. 水晶报表提示“出现打印错误。将停止打印”的原因,非page_Init

    在水晶报表安装完printControl.cab后,弹出选择打印机的界面后,点确定按钮提示"出现打印错误.将停止打印",这可把我郁闷了,到网上一搜,无法就是page_Init里也需 ...

  4. 修复:“ 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. ...

  5. 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 ...

  6. QT出现[Makefile]:error2错误

    在Linux系统中移植QT程序出现[Makefile]:error2错误 经检查是文件目录中存在()/等特殊符号或中文 更改名称后运行通过

  7. 腾讯面试官:如何停止一个正在运行的线程?我蒙了。。。

    以下文章来源方志朋的博客,回复"666"获面试宝典 停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作.停止一个线程可以用Thread.stop()方法, ...

  8. 面试官:如何停止一个正在运行的线程?我一脸蒙蔽...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:cnblogs.com/greta/p/5624839.ht ...

  9. 如何停止一个正在运行的线程?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | cnblogs.com/greta/p/562 ...

最新文章

  1. Linux中/etc/resolv.conf文件简析
  2. 自定义边界_如何批量生成CAD填充的边界?
  3. linux系统启动级别
  4. ActiveMQ activemq web管理界面介绍
  5. [Window] .MUS 0x80070422 Error
  6. [云炬创业管理笔记]第三章打造优秀创业团队讨论4
  7. AOJ 0525 Osenbei【穷竭搜索】
  8. (23)FPGA锁存器与缓冲器的区别
  9. 三星手机真假测试软件,#三星EVO Plus MicroSD存储卡# 火眼金睛识真伪、评测软件测性能...
  10. matlab车牌倾斜校正,求做车牌倾斜校正程序。
  11. app.use()方法详解
  12. Linux搭建LAMP、LNMP环境;论坛的搭建;
  13. 洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树
  14. 如何在Windows中将“显示桌面”图标移动到快速启动栏或任务栏
  15. git删除所有文件夹(清空远程仓库)
  16. android app生涯
  17. 蛋白质界的 ChatGPT:AlphaFold1 论文必备知识,不会有人还不知道吧
  18. 微信如何群发不封号?
  19. windows API 钩子
  20. 计算机分屏解决方案,多屏显示解决方案

热门文章

  1. 知名开源公司上市造就亿万富翁,创始人不做CEO只想做码农
  2. 嵌入式 ARM 编译器
  3. 免注册下载教学课件PPT
  4. Qt实现图片翻转(开源)
  5. 荣耀x6平板支持鸿蒙吗,荣耀平板X6
  6. Qt学习第5天:线程与数据库【笔记】
  7. centos7桌面版下载向日葵和todesk
  8. 【UCB操作系统CS162项目】Pintos Lab2:用户程序 User Programs(下)
  9. KERS:多个子目标推荐对话系统的知识增强框架
  10. 路由跳转新标签页打开