Makefile将stderr重定向到命令中



使用下面的代码,我能够将程序的标准错误输出重定向到error.log文件,并根据程序是否和平退出来调用特定的函数。然而,除此之外,我还想使用fold命令来组织stderr输出,以使行的最大长度不超过80个字符。如何在保留当前功能的同时实现这一点?

代码:

define func
./myProgram 2> error.log && 
$(call successCommand)   || 
$(call failureCommand)
endf

这不能像这里那样工作。Make不包含内部shell解释器:Make调用一个单独的shell进程。所以,你不能在";外壳代码";以及";生成代码";。

在make调用shell之前,它将展开所有make变量和函数。然后,一旦扩展完成,生成的字符串就会传递给shell,shell就会运行整个过程。然后,一旦shell完成并退出,make就会查看退出代码,看看命令是否成功。

因此,在您的情况下,$(call successCommand)$(call failureCommand)都将首先展开,然后调用shell来确定./myProgram是否成功。

由于您没有给我们任何关于successCommandfailureCommand的功能的想法,因此除了在shell中运行测试之外,我们没有太多帮助,因此条件和结果也需要在shell中执行,并且您不能使用像$(call ...)这样的make函数。

最新更新