我正在尝试在 Makefile 中使用 if 和 else 语句,但我在下面尝试的所有内容都不起作用。
我在终端上输入的命令是:
MinGW32-make test
这些变量位于 Makefile 的顶部:
true = 1
false = 0
test:
ifneq ($(true), $(false))
echo "1";
else
echo "2";
endif
test:
if [[ "a12" = "a12" ]]; then
echo "12";
fi
OS : Windows
Text Editor : VScode
I am using mingw64
ifeq
、ifneq
等是makefile操作,不是shell操作。这意味着它们不能由配方中的 TAB 字符缩进,因为配方中由 TAB 字符缩进的所有内容都被假定为 shell 命令并被传递到 shell。
如果你这样写:
test:
ifneq ($(true), $(false))
echo "1"
else
echo "2"
endif
然后它就会起作用,尽管这可能不是你想要做的(你的例子看起来很简单,与你真正想做的事情相去甚远,我们的任何建议可能都不会那么有帮助——当出现时有示例,最好尽可能接近您真正想做的事情,同时仍然简单)。
您的 shell 脚本示例失败的原因是配方中的每个逻辑行都被发送到不同的 shell。所以当你写:
test:
if [[ "a12" = "a12" ]]; then
echo "12";
fi
make 首先仅使用第一行调用 shell:
if [[ "a12" = "a12" ]]; then
。这不是有效的 shell 脚本,因此您会收到错误消息。如果您想将多个物理行发送到一个 shell 脚本中,则必须使用反斜杠将它们继续到单个逻辑行中:
test:
if [[ "a12" = "a12" ]]; then \
echo "12"; \
fi