Makefile for循环-永不设置变量

时间:2018-08-13 15:35:30

标签: makefile

我在下面的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)上的回显始终显示为空,如“”。 解决该问题的任何线索或提示都会有所帮助。

1 个答案:

答案 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会将PRENON_PRE设置为shell变量,但是您的命令没有使用它们,一旦循环执行完成,它们将消失(因为shell变量不会持续存在)越过了炮弹的死亡)。

要修复此代码,您必须解释更多有关您要实现的目标的信息,因为当前这有点XY problem。由于make的暂存性质(首先分析Makefile并处理make变量,然后运行Shell命令作为规则处理的一部分),您根本无法从以下位置设置make变量一个外壳循环。