Makefile:检查是否设置了多个变量

Makefile: check if multiple variables are set

在我的 Makefile 中,我想检查是否设置了多个环境变量。 但是我不想为每个写多个 ifndef 。我只想要一个变量数组以使其可重用。

check-variables:
  for var in var1 var2 var3 ; do \
    if [ -z "$$var" ] ; then \
      echo "$$var is not set"; exit 1; \
    fi \
  done

但是没用...

这不是 make 问题,而是 shell 问题。如果您在 shell 提示符下 运行 该脚本(当然,将 $$ 改回 $ 就像 make 所做的那样)它也不会工作。在您可以让命令在您的 shell 提示符下工作之前,您无法让它在 makefile 中工作。

shell 命令为:

for var in var1 var2 var3 ; do \
  if [ -z "$var" ] ; then \
    echo "$var is not set"; exit 1; \
  fi \
done

您可以看到为什么这不能满足您的要求:您每次都在检查 shell 变量 var。您要做的是检查由 $var 的值命名的变量的值。为此,您需要 eval(shell 的 eval,而不是 make 的 eval 函数):

for var in var1 var2 var3 ; do \
  eval test -n \"$$var\" \
      || { echo "$var is not set"; exit 1; }; \
done

你应该发现上面的内容在 shell 中有效,然后你需要把它放回 makefile 中(并将所有 $ 加倍)。