GNU Make: Как экспортировать переменную SHELL в подмодели?

Из GNU Make инструкция:

Значение переменной make SHELL не экспортируется. Вместо этого значение переменной SHELL из вызывающей среды передается вспомогательному производителю. Вы можете заставить make экспортировать его значение для SHELL, используя директиву export, описанную ниже.

Должно быть, я что-то делаю не так или неправильно читаю руководство, так как этот простой пример не работает:

# ./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 ответ

Решение

SHELL экспортируется (в среду суб-производителя), но в руководстве также сказано

В отличие от большинства переменных, переменная SHELL никогда не устанавливается из среды.

Если вы хотите повлиять на идею подкласса SHELL, вам придется сделать это следующим образом:

call_sub_make:
    $(MAKE) --directory=subdir SHELL=$(SHELL)
Другие вопросы по тегам