GNU Make:如何将 SHELL 变量导出到子 make?

发布于 2024-09-08 17:31:32 字数 990 浏览 2 评论 0原文

来自 GNU Make 手册:

make 变量 SHELL 的值 未导出。相反,值 来自调用的 SHELL 变量 环境被传递给子make。 您可以强制 make 导出其值 对于 SHELL,使用导出 指令,如下所述。

我一定做错了什么,或者没有正确阅读手册,因为这个简单的例子不起作用:

# ./Makefile
export SHELL := /bin/bash
export VALUE := exported_variable
$(info root makefile SHELL=$(SHELL))
call_sub_make:
    $(MAKE) --directory=subdir

并且 subdir/Makefile:

$(info subdir makefile SHELL=$(SHELL))
$(info subdir makefile VALUE=$(VALUE))
do_nothing:

Output:

$ env | grep SHELL
SHELL=/bin/bash
$ make --version
GNU Make 3.81
$ make
root makefile SHELL=/bin/bash
make --directory=subdir
subdir makefile SHELL=/bin/sh
subdir makefile VALUE=exported_variable
make[1]: Entering directory `/home/drtwox/C/make/export_shell/subdir'
make[1]: Nothing to be done for `do_nothing'.
make[1]: Leaving directory `/home/drtwox/C/make/export_shell/subdir'

VALUE 被导出,为什么不是 SHELL?

From the GNU Make manual:

The value of the make variable SHELL
is not exported. Instead, the value of
the SHELL variable from the invoking
environment is passed to the sub-make.
You can force make to export its value
for SHELL by using the export
directive, described below.

I must be doing something wrong, or not reading the manual properly, as this simple example doesn't work:

# ./Makefile
export SHELL := /bin/bash
export VALUE := exported_variable
$(info root makefile SHELL=$(SHELL))
call_sub_make:
    $(MAKE) --directory=subdir

And subdir/Makefile:

$(info subdir makefile SHELL=$(SHELL))
$(info subdir makefile VALUE=$(VALUE))
do_nothing:

Output:

$ env | grep SHELL
SHELL=/bin/bash
$ make --version
GNU Make 3.81
$ make
root makefile SHELL=/bin/bash
make --directory=subdir
subdir makefile SHELL=/bin/sh
subdir makefile VALUE=exported_variable
make[1]: Entering directory `/home/drtwox/C/make/export_shell/subdir'
make[1]: Nothing to be done for `do_nothing'.
make[1]: Leaving directory `/home/drtwox/C/make/export_shell/subdir'

VALUE is exported, why isn't SHELL?

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

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

发布评论

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

评论(1

む无字情书 2024-09-15 17:31:32

SHELL 已导出(到子 make 的环境),但是

与大多数变量不同,变量 SHELL 永远不会从环境中设置。

如果你想影响子品牌的 SHELL 想法,你必须这样做:

call_sub_make:
    $(MAKE) --directory=subdir SHELL=$(SHELL)

SHELL is exported (to the sub-make's environment) alright, but the manual also says

Unlike most variables, the variable SHELL is never set from the environment.

If you want to influence the sub-make's idea of SHELL, you'll have to do it like this:

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