如何实现makefile共享变量

时间:2011-03-08 10:15:22

标签: makefile cygwin

我需要一个makefile中的变量,它可以在subdir makefile之间共享(递归构建策略),最后用它来做出一些决策。我之前认为导出就是这样做的,但我没有得到理想的结果。

以下是我的makefile: -

Target.mk      (common include for both Makefile.mk & Subdir.mk)
Makefile.mk
Subdir.mk

FILE:Target.mk

导出TARGET_PROPERTIES:=


FILE:Makefile.mk

-include Target.mk

.PHONY : all 
all :
    $(MAKE) -C $(PWD) -f Subdir.mk all
    @echo "#------------------------------------------------------------#"
    @echo "Target build properties"
    @echo $(TARGET_PROPERTIES)
    @echo "#------------------------------------------------------------#"

FILE:Subdir.mk

-include Target.mk

TARGET_PROPERTIES+=alpha
TARGET_PROPERTIES+=beta

$(warning $(TARGET_PROPERTIES))

all:
    @echo "Subdir.mk......[OK]"

问题: - 我想从Subdir.mk更新TARGET_PROPERTIES,并在Makefile.mk中使用结果

以下是我的输出

$ make -f Makefile.mk
make -C /cygdrive/c/make_pf -f Subdir.mk all
make[1]: Entering directory `/cygdrive/c/make_pf'
Subdir.mk:8:  alpha beta
Subdir.mk......[OK]
make[1]: Leaving directory `/cygdrive/c/make_pf'
#------------------------------------------------------------#
Target build properties

#------------------------------------------------------------#

在Subdir.mk TARGET_PROPERTIE更新,直到这里。

Subdir.mk:8:  alpha beta
从“Subdir.mk - all target”返回后,在Makefile.mk中

重置为NULL。 不确定我做错了什么

P.S。我正在使用cygwin环境。

1 个答案:

答案 0 :(得分:3)

导出的环境变量已复制到子进程,因此其中的更改不会传播回父进程。

您最好的选择可能是避免使用递归的makefile,而是包含主Makefile.mk中的所有内容。 Google for Recursive Make有害指示如何执行此操作。