我有以下项目结构:
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 }}。有没有办法阻止这种行为?
答案 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