如何在Makefile中使用if和else语句?

问题描述 投票:0回答:1

问题

我正在尝试在 Makefile 中使用 if 和 else 语句,但我在下面尝试的所有内容都不起作用。

我尝试了什么

我在终端上输入的命令是:

MinGW32-make test

这些变量位于 Makefile 的顶部:

true = 1
false = 0

ifneq 声明:

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
bash makefile
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.