我想在 Makefile 中执行某些代码之前检查是否设置了环境变量。如果未设置,我想通过简单的错误消息抛出错误:
run:
[ -z "$(MY_APP)" ] && echo "MY_APP must be set" && exit 1
echo "MY_APP is set. Yay!"
echo "Let's continue on with the command..."
当 MY_APP
未设置时,我收到以下错误,这是我希望的:
[ -z "" ] && echo "MY_APP must be set" && exit 1
MY_APP must be set
make: *** [run] Error 1
但是,当 MY_APP
被设置时,我得到以下错误:
[ -z "EXAMPLE_NAME" ] && echo "MY_APP must be set" && exit 1
make: *** [run] Error 1
知道我做错了什么吗?有没有更好的方法来做到这一点?
最佳答案
回想一下,&&
条件要求所有条件都必须为 TRUE 才能通过。由于第一个条件失败,整个命令将返回状态 1
(-> false),有效地停止 make
您可以使用以下内容,这样只有在缺少MY_APP
时测试才会失败。
请注意,我使用的是 false
而不是 exit 1
。也最好使用 "${MY_APP}"
,这样可以更轻松地从 Make 复制/粘贴到 shell 提示符/脚本。
run:
{ [ -z "$(MY_APP)" ] && echo "MY_APP must be set" && false } || true
...
# Or just if-Then-Else
if [ -z "${MY_APP}" ] ; then echo "MY_APP must be set" ; false ; fi
...
关于bash - Makefile:有条件退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58603062/