【发布时间】:2018-06-21 00:18:38
【问题描述】:
如果 shell 命令输出 $$,我如何终止 Makefile 并出现错误? -ne 0 ?
HELPER := $(shell dirname $(abspath $(lastword
VERSION ?= $(shell . $(HELPER); getVersion) || (echo "getVersion failed '$$?' status"; exit 1)
test:
@echo "What is going on?$(VERSION) ?"
helper.sh:
#!/bin/bash
printError() {
echo "[MAKE] $1" 2>/dev/stderr
}
getVersion() {
version=$(git describe --exact-match --tags $(git log -n1 --pretty='%h') 2>/dev/null)
if [ $? -ne 0 ]; then
printError "Getting git tag for version failed. Checkout existing tag or"
printError "provide your own version 'make <action> VERSION=<your-version>'"
exit 1
fi
echo "${version}"
exit 0
}
输出:
$ make test
What is going on?[MAKE] Getting git tag for version failed. Checkout existing tag or [MAKE] provide your own version 'make <action> VERSION=<your-version>' || (echo getVersion failed $? status; exit 1) ?
我无法在出错时终止它( getVersion 返回 1 ),但通过管道传送到 /dev/stderr 的错误消息也正在到达 VERSION 变量
【问题讨论】:
-
Makefile 问题应该标记为 make,而不是 shell。 Make 语法不是 shell 语法——它用于生成 shell 命令,但它本身就是非常不同的东西。
-
另见stackoverflow.com/a/59392005/491884,您可以使用hack(使用
|| kill $$PPID杀死父制作过程。