防止递归 Makefile 中的变量覆盖

亚历山德罗·鲍尔

我有以下项目结构:

project/
  - Makefile
  - foo/
    - foo.mk
  - bar/
    - bar.mk

内容Makefile

.PHONY: all foo bar

all: foo bar

include foo/foo.mk
include bar/bar.mk

内容foo/foo.mk

SOME_VAR=foo

foo:
        @echo $(SOME_VAR)

内容bar/bar.mk

SOME_VAR=bar

bar:
        @echo $(SOME_VAR)

运行命令make产生输出

bar
bar

观察到的输出很容易解释:配方中的变量仅在执行规则时才展开,因此 whenSOME_VARbar.mk规则中被覆盖用于foo打印bar有什么办法可以防止这种行为吗?

用户657267

一种方法是使用特定目标的变量值

将您的子 makefile 更改为

bar: SOME_VAR=bar
bar:
    @echo $(SOME_VAR)
foo: SOME_VAR=foo
foo:
    @echo $(SOME_VAR)

递归 make 也可以

all:
    $(MAKE) -C foo -f foo.mk
    $(MAKE) -C bar -f bar.mk

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章