如何在makefile配方中设置环境变量?
问题描述:
下面是一个简化的生成文件:如何在makefile配方中设置环境变量?
all:
@for ((i = 0; i < 5; ++i)); do \
var="$$var $$i"; \
echo $$var; \
done
@echo $$var
我想的 “VAR” 的值是 “0 1 2 3 4”,但输出的是:
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
<--- NOTHING!!!
正如你可以看到的最后回声是“没有”。哪里不对?
答
从here:
当它是时间来执行菜谱更新的目标,他们是通过调用一个新的子shell为配方的每一行执行...
请注意:这意味着设置shell变量和调用shell设置命令(如
cd
)可以为每个进程设置本地上下文,这不会影响配方中的以下行。如果您想使用cd
来影响下一条语句,请将这两条语句放在单个配方行中。然后make
将调用一个shell来运行整个行,并且shell将按顺序执行这些语句。
尝试以下方法:
all:
@for ((i = 0; i < 5; ++i)); do \
var="$$var $$i"; \
echo $$var; \
done; \
echo $$var
+0
是的,它的工作原理!谢谢! Makefile中有这么多陷阱〜 – 2012-04-16 02:59:34
+0
@李,不客气 – 2012-04-16 13:21:31
我怀疑每个配方命令在子shell调用,所以在第一配方中定义的“VAR”不能在第二行被称作。这是正确的吗? – 2012-04-15 12:40:58