我必须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;
希望这可以帮助!