GNU Make。范围限制为单个Makefile的变量

时间:2012-10-19 09:01:24

标签: makefile gnu-make

我尝试在当前项目中实现非递归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的末尾并使用立即变量赋值:=

2 个答案:

答案 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