Makefile:有条件退出

Joh*_*etz 5 bash makefile

我想在 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..."
Run Code Online (Sandbox Code Playgroud)

MY_APP未设置时,我收到以下错误,这是需要的:

[ -z "" ] && echo "MY_APP must be set" && exit 1
MY_APP must be set
make: *** [run] Error 1
Run Code Online (Sandbox Code Playgroud)

但是,何时MY_APP设置我收到以下错误:

[ -z "EXAMPLE_NAME" ] && echo "MY_APP must be set" && exit 1
make: *** [run] Error 1
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?有没有更好的方法来做到这一点?

das*_*h-o 7

回想一下,该&&条件要求所有条件都必须为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
    ...
Run Code Online (Sandbox Code Playgroud)