Recursion 如何调用shell来创建一个新环境以在另一个make中运行make?

Recursion 如何调用shell来创建一个新环境以在另一个make中运行make?,recursion,gnu-make,Recursion,Gnu Make,我希望在我的GNUmakefile中有一个调用新shell的目标规则,然后在新shell的基础上调用一个新make 这样做的语法是什么 我试过了,但没用: .PHONY: setup setup: shell cd myDir; make; cd .. 它会无限重复以下错误: make[1]: Entering directory `/disk4/home/user/parent' shell cd myDir; make; cd .. /bin/sh: shell: command not

我希望在我的GNUmakefile中有一个调用新shell的目标规则,然后在新shell的基础上调用一个新make

这样做的语法是什么

我试过了,但没用:

.PHONY: setup
setup:
 shell cd myDir; make; cd ..
它会无限重复以下错误:

make[1]: Entering directory `/disk4/home/user/parent'
shell cd myDir; make; cd ..
/bin/sh: shell: command not found
make[1]: Entering directory `/disk4/home/user/parent'
shell cd myDir; make; cd ..
/bin/sh: shell: command not found
[...]
Paren使用自己的“当前目录”调用一个新的子shell

.PHONY: setup
setup:
 (cd myDir; env --unset=MAKEFLAGS make)

帕伦夫妇是没有必要的。配方中的每一行都在它自己的shell中调用。您的配方似乎有一个多余的shell字符串,shell试图将其作为命令执行(/bin/sh(您的shell,而不是make)抱怨
shell:command not found

此外,make的
-C
参数在这种情况下也很方便

另外,从shell调用make时,请使用
${make}

.PHONY: setup
setup:
    unset MAKEFLAGS; ${MAKE} -C myDir

新的子shell正在从父级继承某些内容,因为(cd myDir;make)的行为与使用此规则从makefile外部的顶部调用的行为不同。是的,它将继承所有导出的变量。如果您想防止这种情况,请使用
env
。请详细说明如何使用env。不知何故,这是‘env-i’吗?
.PHONY: setup
setup:
    unset MAKEFLAGS; ${MAKE} -C myDir