GNU Make: Как экспортировать переменную SHELL в подмодели? - PullRequest
1 голос
/ 12 июля 2010

Из руководства по 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?

1 Ответ

2 голосов
/ 12 июля 2010

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

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

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

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