从GNU Make手册:
make变量SHELL的值 不会导出。相反,价值 来自调用的SHELL变量 环境传递给sub-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:
输出:
$ 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?
答案 0 :(得分:2)
SHELL导出(到sub-make的环境)好,但the manual也说
与大多数变量不同,变量SHELL永远不会从环境中设置。
如果你想影响sub-make的SHELL想法,你必须这样做:
call_sub_make:
$(MAKE) --directory=subdir SHELL=$(SHELL)