linux – 在makefile中处理管道及其退出状态的最佳方式

linux – 在makefile中处理管道及其退出状态的最佳方式,第1张

概述如果命令失败,例如 gcc,它将退出… gccgcc: fatal error: no input filescompilation terminated.make: *** [main.o] Error 4 但是,如果我有一个管道,则管道中最后一个命令的退出状态将被采用.例如,gcc |猫不会因为猫成功而失败. 我知道整个管道的退出代码存储在PIPESTATUS数组中,我可以用${PIPE 如果命令失败,例如 gcc,它将退出…
gccgcc: Fatal error: no input filescompilation 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手册页:

The return status of a pipeline is the exit status of the last command,unless the pipefail option is enabled. If pipefail is enabled,the pipeline’s return status is the value of the last (rightmost) command to exit with a non-zero status,or zero if all commands exit successfully. If the reserved word ! precedes a pipeline,the exit status of that pipeline is the logical negation of the exit status as described above. The shell waits for all commands in the pipeline to terminate before returning a value.

总结

以上是内存溢出为你收集整理的linux – 在makefile中处理管道及其退出状态的最佳方式全部内容,希望文章能够帮你解决linux – 在makefile中处理管道及其退出状态的最佳方式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1048877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存