如何在makefile中获取bash命令的退出状态?

问题描述:

我有一个Makefile这样的:如何在makefile中获取bash命令的退出状态?

k: 
     status=$(shell ./x.sh;echo $?) 
     ifeq ($(status),0) 
        echo success 
     else 
        echo failure 
        exit 1 
     endif 

x.sh是简单的脚本,打印数字1到10。

所以,当我运行make:

[email protected]:$make k 
status=1 2 3 4 5 6 7 8 9 10 
/bin/sh: 1: 2: not found 
Makefile:2: recipe for target 'k' failed 
make: *** [k] Error 127 

在这里,我得到的输出脚本而不是$?。而当我在ifeqstatus中比较值为空。

我该如何获得这项工作?另外我该如何使用.ONESHELL指令?如果出现问题,我是否可以退出制作而不是执行以下指令:exit 1

GNU make的配方通常由/bin/sh执行,这意味着构造语法的ifeq构造不起作用。

现在坏消息:你试图做的通常是一个坏主意。在GNU make中使用shell变量很可能会破坏你的程序。使用外壳条件会将其颈部折断。

我会在你的情况

k: 
    ./x.sh 
    @echo Success! 

如果./x.sh失败怎么办(即具有非零退出状态),让会自行停止。如果你迫切需要的退出状态,我发现这是工作:

k: 
    -./x.sh 
    @echo [email protected] 

一些解释:

通常make将打印它执行的每一行。该行在该行停止之前为@。 通常,make将以非零退出状态执行时停止。在一条线将停止之前,-

编辑:在你的代码中的错误是由该行造成的 - >

status=1 2 3 4 5 6 7 8 9 10 

刚刚尝试在shell中运行它。你可以用单引号或双引号把它括起来,但就像我说的,你试图做的是非常“un make ly”。