Из руководства по GNU Make:
Значение переменной make SHELL не экспортируется.Вместо этого значение переменной SHELL из вызывающей среды передается вспомогательному производителю.Вы можете принудительно заставить make экспортировать его значение для SHELL, используя директиву экспорта, описанную ниже.
Я, должно быть, что-то делаю неправильно или неправильно читаю руководство, так как этот простой пример не работает:
# ./Makefile
export SHELL := /bin/bash
export VALUE := exported_variable
$(info root makefile SHELL=$(SHELL))
call_sub_make:
$(MAKE) --directory=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?