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手册页:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |