使用下面的代码,我能够将程序的标准错误输出重定向到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
是否成功。
由于您没有给我们任何关于successCommand
和failureCommand
的功能的想法,因此除了在shell中运行测试之外,我们没有太多帮助,因此条件和结果也需要在shell中执行,并且您不能使用像$(call ...)
这样的make函数。