在foreach循环中调用导出

时间:2018-03-04 20:38:29

标签: recursion makefile

我想通过export

将变量传递给子makefile

主Makefile包含将被编译的组件COMPONENT_LIST的列表。在目标all的规则中,我使用USE_COMP_1函数导出了USE_COMP_2USE_COMP_3foreach个变量:

COMPONENT_LIST:=\
COMP_1\
COMP_2\
COMP_3


all:
    $(foreach comp,$(COMPONENT_LIST),export USE_$(comp)=y;)     
    @for comp in $(COMPONENT_LIST) ; do \
        make -C $$comp all; \
        if [ ! $$? -eq 0 ]; then \
            echo "component \"$$comp\" not found. Please make sure that folder \"$$comp\" exist";\
            exit 1; \
        fi \
    done

但是在子Makefile中USE_COMP_1USE_COMP_2USE_COMP_3的值为空。

对此有任何解释吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

每个子命令都在自己的shell中运行

所以我错过了\

all:
    $(foreach comp,$(COMPONENT_LIST),export USE_$(comp)=y;)\
    for comp in $(COMPONENT_LIST) ; do \
        make -C $$comp all; \
        if [ ! $$? -eq 0 ]; then \
            echo "component \"$$comp\" not found. Please make sure that folder \"$$comp\" exist";\
            exit 1; \
        fi \
    done

在这种情况下,export和以下for循环在同一个shell中运行