防止递归Makefile中的变量覆盖

时间:2017-06-08 15:32:43

标签: 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

观察到的输出很容易解释:只有在执行规则时才会扩展配方中的变量,因此当SOME_VAR中覆盖bar.mk时,foo的规则会打印{{1 }}。有没有办法阻止这种行为?

1 个答案:

答案 0 :(得分:1)

一种方法是使用target-specific variable values

将您的子文件更改为

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