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

发布于 2024-09-06 06:56:44 字数 476 浏览 4 评论 0原文

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

I would like in my GNUmakefile to have a target rule that invokes a new shell and then with the clean slate of the new shell invokes a new make.

What is the syntax to do this?

I tried this but it didn't work:

.PHONY: setup
setup:
 shell cd myDir; make; cd ..

It gets infinite repeat of the following error:

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
[...]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜心小果奶 2024-09-13 06:56:44
(cd myDir ; make)

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

(cd myDir ; make)

The parens invoke a new subshell, with its own "current directory".

停顿的约定 2024-09-13 06:56:44

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

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

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

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

The parens are not necessary. Every line in a recipe is invoked in its own shell anyway. Your recipe seems to have a superfluous shell string, which your shell tries to execute as a command (/bin/sh (your shell, not make) complains shell: command not found).

Also, make's -C parameter is handy in this case.

Also, when calling make from the shell, use the ${MAKE} macro.

.PHONY: setup
setup:
    unset MAKEFLAGS; ${MAKE} -C myDir
北笙凉宸 2024-09-13 06:56:44

这是有效的:

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

Here is what works:

.PHONY: setup
setup:
 (cd myDir; env --unset=MAKEFLAGS make)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文