我正在尝试将命令的标准退出状态保存在我的 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/sh
shell,但你可以通过设置覆盖它
SHELL := /bin/bash
这对于无法执行的更复杂的命令很有用/bin/sh
。