我尝试在当前项目中实现非递归make构建系统。我挣扎的是变量范围。目标特定变量不符合我的需要,因为通常变量定义目标而不是先决条件。 我需要的是:
Makefile1:
SOMEVAR := original_value
include Makefile2
$(warning $(SOMEVAR))
Makefile2:
#some magic here to do what I want and make me happy
SOMEVAR := included_value
#and maybe here
我想要的输出是'original_value'。
是否有任何策略可以实现?
编辑:我目前唯一的解决方案是强制并组织自己将所有内容放在每个特定Makefile的末尾并使用立即变量赋值:=
答案 0 :(得分:5)
一种策略是变量名称冲突的老式解决方案,当你拥有全局变量时:以穷人命名空间的形式为你的变量名添加一个前缀。
Makefile1:
Makefile1_SOMEVAR := original_value
include Makefile2
$(warning $(Makefile1_SOMEVAR))
Makefile2:
# no magic needed
Makefile2_SOMEVAR := included_value
# rest of Makefile2 uses $(Makefile2_SOMEVAR) of course
嘿presto,使用这样的约定,好像每个makefile都有自己的局部变量(或者,至少,它自己的变量在命名空间中不与任何其他makefile冲突)。
答案 1 :(得分:0)
像这样使用override
指令:
Makefile1:
override SOMEVAR := original_value
include Makefile2
$(warning $(SOMEVAR))
Makefile2:
#some magic here to do what I want and make me happy
SOMEVAR := included_value
#and maybe here