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

如何在makefile中获取bash命令的退出状态?,bash,makefile,Bash,Makefile,我有这样一个Makefile: k: status=$(shell ./x.sh;echo $?) ifeq ( $(status),0) echo success else echo failure exit 1 endif x.sh是打印数字1到10的简单脚本 因此,当我执行make时: ramana@Ramana

我有这样一个Makefile:

k:
        status=$(shell ./x.sh;echo $?)
        ifeq ( $(status),0)
                   echo success
        else
                   echo failure
                   exit 1
        endif
x.sh
是打印数字1到10的简单脚本

因此,当我执行make时:

ramana@Ramana:$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
这里我得到的是脚本的输出,而不是
$?
。当我在
ifeq
状态中比较时
值为空


我怎样才能得到这份工作?还有如何使用.ONESHELL指令?如果出现问题,我真的可以退出make而不是使用
exit 1
执行以下指令吗?

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

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

在你的情况下我会怎么做

k:
    ./x.sh
    @echo Success!
如果./x.sh失败(即具有非零退出状态),make将自行停止。如果您迫切需要退出状态,我发现这是可行的:

k:
    -./x.sh
    @echo $$@
一些人解释说:

通常,
make
将打印它执行的每一行<代码>@在该行停止之前。 正常情况下,如果以非零退出状态执行,则
make
将停止<代码>-在一行停止之前

编辑:代码中的错误是由该行-->

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

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