在 make 文件中导出 env var,以便子 make 文件可用
Export env var in make file so it's available to sub make files
我在顶级 makefile 中有以下规则。我想在此级别设置一个环境变量,以便 shell 所有子 make 规则都可以访问它。
请问这是怎么做到的?
get:
for i in $(STACK_DIRS) ; do \
cd $(CURDIR)/$${i} && make get ; \
done \
导出变量的shell命令是export
。
get:
for i in $(STACK_DIRS) ; do \
foo="bar"; export foo; cd $(CURDIR)/$${i} && make get ; \
done
虽然你也可以直接说
get:
for i in $(STACK_DIRS) ; do \
cd $(CURDIR)/$${i} && make foo="bar" get ; \
done
一种更为惯用的方法是 运行 分别针对每个目标。我们为每个 $i
创建 .$i.get_done
,如下所示:
.PHONY: get
get: $(patsubst %,.%.get_done,$(STACK_DIRS))
.%.get_done:
cd $(CURDIR)/$* && make foo="bar" get
现在如果 .ick.get_done
存在,这意味着 get
是 运行 在子目录 ick
中,如果它比它的所有依赖项都新,它不会需要重新制作。
我在顶级 makefile 中有以下规则。我想在此级别设置一个环境变量,以便 shell 所有子 make 规则都可以访问它。
请问这是怎么做到的?
get:
for i in $(STACK_DIRS) ; do \
cd $(CURDIR)/$${i} && make get ; \
done \
导出变量的shell命令是export
。
get:
for i in $(STACK_DIRS) ; do \
foo="bar"; export foo; cd $(CURDIR)/$${i} && make get ; \
done
虽然你也可以直接说
get:
for i in $(STACK_DIRS) ; do \
cd $(CURDIR)/$${i} && make foo="bar" get ; \
done
一种更为惯用的方法是 运行 分别针对每个目标。我们为每个 $i
创建 .$i.get_done
,如下所示:
.PHONY: get
get: $(patsubst %,.%.get_done,$(STACK_DIRS))
.%.get_done:
cd $(CURDIR)/$* && make foo="bar" get
现在如果 .ick.get_done
存在,这意味着 get
是 运行 在子目录 ick
中,如果它比它的所有依赖项都新,它不会需要重新制作。