我有一个Makefile,它可以从一个新的shell中完美地调用,即:
make -C /dir/
但是,如果我从另一个 Makefile调用此Makefile,则由于某些复杂的依赖性问题而失败。清楚地了解嵌套调用,通过make[1]:
等打印明显,我怀疑make是以某种方式与其子进程共享变量。
有没有在Makefile中调用 clean make?如果我的构建工作是从一个干净的shell,它应该可以从另一个Makefile调用它而不解决脚本内部的恐怖! :)
谢谢!
答案 0 :(得分:10)
make
确实在递归调用时分享了它的一些环境。正如https://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion中所建议的那样,您可能希望以这种方式编写递归调用:
sub-make:
$(MAKE) -C /dir/ MAKEFLAGS=
看看它是否有帮助。您还可以使用export
和unexport
指令(https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html#Variables_002fRecursion)来控制导出到子品牌的变量
答案 1 :(得分:1)
调用者制作中的一些环境变量打破了被调用者的制作(CFLAGS等...)
我的解决方案是将环境区分为干净的外壳和呼叫点。然后我手动将问题变量添加到列表中并创建了一些save_env / restore_env脚本。
谢谢!