如何将错误参数传递到Makefile中的下一行

如何将错误参数传递到Makefile中的下一行,makefile,Makefile,例如,Makefile如下所示。只有一个目标“测试”。 因为“open”不是有效的命令,所以第一行将出错。如何将此错误信息传输到以下条件指令 Test: - open test.doc; ${foo} := $$? ifeq (foo, 127) echo "there is a fault" else echo "why?" endif 默认情况下,一旦命令返回非零状态,make将停止处理。您可以通过编写包装器脚本,或者通过添加显式SHELL命令来测试返回代码

例如,Makefile如下所示。只有一个目标“测试”。 因为“open”不是有效的命令,所以第一行将出错。如何将此错误信息传输到以下条件指令

Test:
    - open test.doc; ${foo} := $$?
ifeq (foo, 127)
    echo "there is a fault"
else    
    echo "why?"
endif

默认情况下,一旦命令返回非零状态,make将停止处理。您可以通过编写包装器脚本,或者通过添加显式SHELL命令来测试返回代码来改变这一点

Test:
    - open test.doc ; foo=$$? ; \
    if [ "$foo" = 127 ] ; then echo "There is a fault" ; else echo "Why ?" ; fi
备选方案:

Test:
    - open test.doc ; \
    if [ "$?" = 127 ] ; then echo "There is a fault" ; else echo "Why ?" ; fi

我相信在执行目标之前,
ifeq
会被提前处理。另外,配方中的shell变量与
make
变量完全不同。配方中的外壳代码无法为
make
变量赋值。