12

我有一个可以从新外壳完美调用的 Makefile,即:

make -C /dir/

但是,如果我从另一个Makefile调用这个 Makefile ,它会由于一些复杂的依赖问题而失败。Make 清楚地知道嵌套调用,从make[1]:etc 的打印中可以看出,我怀疑 make 以某种方式与其子进程共享变量。

无论如何从Makefile中调用一个干净的make?如果我的构建是从一个干净的 shell 工作的,那么应该可以从另一个 Makefile 调用它,而无需解决脚本中的恐怖问题!:)

谢谢!

4

2 回答 2

13

make当它被递归调用时,确实共享它的一些环境。正如https://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion中所建议的,您可能希望这样编写递归调用:

sub-make:
        $(MAKE) -C /dir/ MAKEFLAGS=

看看它是否有帮助。export您还可以使用和unexport指令控制导出到子make的变量( https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html#Variables_002fRecursion

于 2013-02-20T07:56:38.623 回答
1

调用者make中的一些环境变量破坏了被调用者make(CFLAGS等......)

我的解决方案是在一个干净的外壳和呼叫点区分环境。然后我手动将问题变量添加到列表中并创建了一些 save_env/restore_env 脚本。

谢谢!

于 2013-02-20T23:50:07.337 回答