解决方法是使用make中的变量传递机制。在子make中,使用make的内置函数export
和unexport
来控制变量的导出和不导出。
以下是一个示例代码:
Makefile:
export VAR := value
.PHONY: submake
submake:
@$(MAKE) -C subdir
.PHONY: print
print:
@echo "VAR=$(VAR)"
subdir/Makefile:
.PHONY: all
all:
@$(MAKE) -C subsubdir
.PHONY: print
print:
@echo "VAR=$(VAR)"
subdir/subsubdir/Makefile:
.PHONY: print
print:
@echo "VAR=$(VAR)"
在这个示例中,我们在顶层Makefile中定义了一个变量VAR
并使用export
导出到子make。然后,我们在子make的Makefile中使用$(VAR)
来获取该变量的值。
当执行make submake
时,会先进入subdir目录,然后再进入subdir/subsubdir目录。在每个目录中,使用$(VAR)
打印出变量的值。
执行make print
可以直接在顶层make中打印出变量的值。
这样,我们就可以在子make中使用父make中的变量,而不会将子make中的变量更改导出到父make。