bash - Makefile:有条件退出

标签 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..."

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/

相关文章:

perl - 图片::Magick 安装错误 127

bash 。返回两个函数级别(两个嵌套调用)

windows - bash:在 MobaXterm 中运行 gradle 时找不到小程序

macos - 可以在 OS X 中获取附加到 stdin 的文件名吗?

c - 为什么当我用记事本创建 Makefile 时,它​​保存的是 .txt

c++ - G++ - 未定义对已定义成员函数的引用

bash - 有没有办法在 zsh 中获取任意 bash 脚本(即 msys2-packages "shell")?

bash - AWK - 从命令行将生成的字符串作为 awk 的代码传递

makefile - Solaris 10 Makefile 中条件的语法是什么?

bash - 在 Makefile 中提取操作系统名称和版本号