如何在makefile中获取bash命令的退出状态?
我有这样一个Makefile:如何在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
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