在foreach循环中调用导出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在foreach循环中调用导出相关的知识,希望对你有一定的参考价值。

我想通过export将变量传递给子makefile

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

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_1的值,USE_COMP_2and和USE_COMP_3是空的。

这有什么解释吗?

答案

我找到了解决方案。

每个子命令都在自己的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中运行

以上是关于在foreach循环中调用导出的主要内容,如果未能解决你的问题,请参考以下文章

如何将许多变量和函数从全局环境导出到 foreach 循环?

在 foreach 循环中找不到函数

在 Knockout foreach 循环中编写 HTML 代码(通过 Razor 调用)

在 ForEach 循环中调用函数

使用Kotlin中的foreach循环遍历BigInteger值

forEach循环中的Javascript API队列