在 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 中,如果它比它的所有依赖项都新,它不会需要重新制作。