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

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

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

我尝试过这个:

pruebas:
    @A= $(ls)

...但它不起作用。

答案1

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

ls --qwfpgjl > /dev/null 2>&1 ; echo $?

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

ls --qwfpgjl > /dev/null 2>&1 ; echo $?

应该给你

2

ls因为当有未知参数时会返回错误(参见ls手册页)。

现在如何将其包含在 Makefile 中?只需添加以下行

A=$(shell ls > /dev/null 2>&1 ; echo $$?)

$到您的 Makefile。请注意中的额外内容$$?,它表示make不是$?Makefile 中的变量。

就是这样!在这里您可以看到我用来测试此行为的 Makefile:

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

test:
    @echo $A
.PHONY: test

笔记:
make默认情况下会选择/bin/shshell,但你可以通过设置覆盖它

SHELL := /bin/bash

这对于无法执行的更复杂的命令很有用/bin/sh

相关内容