我需要一个makefile中的变量,它可以在subdir makefile之间共享(递归构建策略),最后用它来做出一些决策。我之前认为导出就是这样做的,但我没有得到理想的结果。
以下是我的makefile: -
Target.mk (common include for both Makefile.mk & Subdir.mk) Makefile.mk Subdir.mk
导出TARGET_PROPERTIES:=
-include Target.mk .PHONY : all all : $(MAKE) -C $(PWD) -f Subdir.mk all @echo "#------------------------------------------------------------#" @echo "Target build properties" @echo $(TARGET_PROPERTIES) @echo "#------------------------------------------------------------#"
-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环境。
答案 0 :(得分:3)
导出的环境变量已复制到子进程,因此其中的更改不会传播回父进程。
您最好的选择可能是避免使用递归的makefile,而是包含主Makefile.mk中的所有内容。 Google for Recursive Make有害指示如何执行此操作。