2

我希望在我的 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
[...]
4

3 回答 3

2
(cd myDir ; make)

括号调用一个新的子shell,它有自己的“当前目录”。

于 2010-06-16T01:51:09.103 回答
1

括号不是必需的。无论如何,配方中的每一行都会在其自己的 shell 中调用。您的配方似乎有一个多余的shell字符串,您的 shell 尝试将其作为命令执行(/bin/sh(您的 shell,而不是make)抱怨shell: command not found)。

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

此外,从 shell 调用 make 时,请使用${MAKE}宏。

.PHONY: setup
setup:
    unset MAKEFLAGS; ${MAKE} -C myDir
于 2010-09-23T16:49:51.547 回答
0

这是有效的:

.PHONY: setup
setup:
 (cd myDir; env --unset=MAKEFLAGS make)
于 2010-06-16T04:19:48.287 回答