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

时间:2010-07-12 08:15:39

标签: makefile gnu-make

从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?

1 个答案:

答案 0 :(得分:2)

SHELL导出(到sub-make的环境)好,但the manual也说

  

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

如果你想影响sub-make的SHELL想法,你必须这样做:

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