linux – 在makefile中处理管道及其退出状态的最佳方式
|
如果命令失败,例如 gcc,它将退出… gcc gcc: fatal error: no input files compilation terminated. make: *** [main.o] Error 4 但是,如果我有一个管道,则管道中最后一个命令的退出状态将被采用.例如,gcc |猫不会因为猫成功而失败. 我知道整个管道的退出代码存储在PIPESTATUS数组中,我可以用${PIPESTATUS [0]}获取错误代码4.我应该如何构造我的makefile来处理一个管道命令,并正常退出失败? 在评论中,另一个例子是gcc | grep的东西在这里,我认为最需要的行为仍然是gcc,只有gcc导致失败,如果没有找到任何东西,则不会grep. 解决方法你应该可以告诉make使用bash而不是sh,并且bash将set -o pipefail设置为使得它在管道中首次出现故障时退出.在GNU Make 3.81(大概早些虽然我不知道肯定),你应该能够用SHELL = / bin / bash -o pipefail这样做. 在GNU Make 3.82(和更新版本)中,您应该可以使用SHELL = / bin / bash和.SHELLFLAGS = -o pipefail -c(尽管我不知道如何添加-c到最后是必要的,如果make将为您添加,即使指定.SHELLFLAGS. 从bash手册页:
(编辑:长春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – GNU malloc_info():获得真正分配的内存
- LINUX入门:crond脚本执行并发冲突问题
- 在Linux上用C实现一个线程安全的通用堆栈
- linux – 向进程组的所有成员发送信号的最佳方法
- linux – su和sudo在shell脚本中
- linux – cgroups隔离(分离组进程)
- linux – LXC – Cgroup内存控制器:丢失
- linux – 在Debian Squeeze上升级phpmyadmin(和其
- linux – [01000] [unixodBC] [Driver Manager]无
- linux – 活动套接字的{tcp_error,Socket,etimed
