我想通过export
主Makefile包含将被编译的组件COMPONENT_LIST
的列表。在目标all
的规则中,我使用USE_COMP_1
函数导出了USE_COMP_2
,USE_COMP_3
和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_2
和USE_COMP_3
的值为空。
对此有任何解释吗?
答案 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中运行