将标准退出状态分配给 makefile 变量

Mot*_*mbo 2 makefile make

我正在尝试将命令的标准退出状态保存在我的 makefile 的变量中,但我不知道该怎么做。

我试过这个:

pruebas:
    @A= $(ls)
Run Code Online (Sandbox Code Playgroud)

......但它不起作用。

Ger*_*ger 5

您可以使用$(shell command)语法从 Makefile 在 shell 中执行命令。例如,如果您想ls在 bash 中退出命令的状态,您可以输入:

ls --qwfpgjl > /dev/null 2>&1 ; echo $?
Run Code Online (Sandbox Code Playgroud)

这可能需要一些解释:该> /dev/null 2>&1部分将标准输出和标准错误都重定向到 /dev/null 以便您看不到任何输出,然后是 'echo $?' 打印最后一个命令的退出状态。例如,您可以在命令行中尝试此操作以查看它是否适合您

ls --qwfpgjl > /dev/null 2>&1 ; echo $?
Run Code Online (Sandbox Code Playgroud)

应该给你

2
Run Code Online (Sandbox Code Playgroud)

因为这是ls在存在未知参数时返回的错误(请参阅ls手册页)。

现在如何将它包含在你的 Makefile 中?只需添加行

A=$(shell ls > /dev/null 2>&1 ; echo $$?)
Run Code Online (Sandbox Code Playgroud)

到你的 Makefile。注意额外的$in $$?,它make表明$?它不是 Makefile 中的变量。

应该是这样!在这里你可以看到我用来测试这个行为的 Makefile:

#SHELL := /bin/bash
A=$(shell ls > /dev/null 2>&1 ; echo $$? )

test:
    @echo $A
.PHONY: test
Run Code Online (Sandbox Code Playgroud)

注意:默认
make选择/bin/sh外壳,但您可以通过设置覆盖它

SHELL := /bin/bash
Run Code Online (Sandbox Code Playgroud)

这对于不在/bin/sh.