我在下面的for循环中可以遍历预定义的列表并设置将在make中进一步使用的变量
for ENTRY in $(ARRAY); do \
if test "$${ENTRY}" = $(PRE_ID); then \
echo "$${ENTRY}"; \
PRE=1; \
NON_PRE=0; \
echo "$(PRE)"; \
else echo "$(PRE_ID)"; \
NON_PRE=1; echo "$(NON_PRE)"; \
fi \
done
在上面的循环中,所有条件检查均正确执行,但变量set语句未执行。 $(PRE)和$(NON_PRE)上的回显始终显示为空,如“”。 解决该问题的任何线索或提示都会有所帮助。
答案 0 :(得分:0)
您似乎对make
本身的指令和make
执行的命令感到困惑。
这里显示的内容(本身)不是有效的Makefile语法,而是Shell脚本。 make
唯一要做的就是扩展make
变量($(...)
/ $$
部分),得到
for ENTRY in one two three; do \
if test "${ENTRY}" = whatever-PRE_ID-is; then \
echo "${ENTRY}"; \
PRE=1; \
NON_PRE=0; \
echo ""; \
else echo "whatever-PRE_ID-is"; \
NON_PRE=1; echo ""; \
fi \
done
(这里我假设PRE_ID
是在Makefile中的其他位置定义的,但是PRE
/ NON_PRE
没有定义,所以它们变成...什么都没有)。然后,此结果命令将传递到sh -c
并作为shell脚本执行。
shell会将PRE
和NON_PRE
设置为shell变量,但是您的命令没有使用它们,一旦循环执行完成,它们将消失(因为shell变量不会持续存在)越过了炮弹的死亡)。
要修复此代码,您必须解释更多有关您要实现的目标的信息,因为当前这有点XY problem。由于make
的暂存性质(首先分析Makefile并处理make
变量,然后运行Shell命令作为规则处理的一部分),您根本无法从以下位置设置make
变量一个外壳循环。