Makefile 中未设置变量

Makefile 中未设置变量

我必须profile在中设置变量Makefile,如果默认情况下未设置,则这是我的方法。

但是当我运行这个程序时,echo 语句工作正常,但是变量没有被设置。

set_vars:
    if [ "${profile}" = "" ]; then \
        profile="test"; \
    else \
        echo "Profile exists";\
    fi

    echo $(profile);

答案1

您需要记住,make 的“makefile”部分与“shell”部分是分开的。

一旦进入 makefile 的配方,它就全是 shell 命令。这意味着您无法从其中设置 makefile 变量。

但是,有办法解决这个问题,使用 $(shell) 和 $(eval) makefile 命令。

https://www.gnu.org/software/make/manual/html_node/Shell-Function.html

https://www.gnu.org/software/make/manual/html_node/Eval-Function.html

在您的情况下,类似这样的方法可以奏效。该eval命令将其余文本评估为 makefile(即使在配方内),因此我们将 Makefile 变量设置profile为命令的结果shell。在那里,您可以进行 bash 断言并回显您想要的变量。

只有这样,对 makefile 变量的更改才会真正发生。

set_vars:
    $(eval profile := $(shell [ "${profile}" = "" ] && echo 'test' || echo 'Profile Exists')

    echo $(profile);

另一方面,您可以将 Makefile 变量转换为 bash 变量并按以下方式操作它:

set_vars:
    PROFILE=${profile}
    if [ $PROFILE = "" ]; then \
        PROFILE="test"; \
    else \
        echo "Profile exists";\
    fi

    echo $PROFILE;

希望这可以帮助!

相关内容