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 中(并将所有 $
加倍)。
在我的 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 中(并将所有 $
加倍)。