Я бы ожидал, что директива unexport
make сбросит переменную. Из чтения онлайн кажется, что это то, что он должен делать:
https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html
Если вы хотите запретить экспорт переменной, используйте директива неэкспорта, например:
переменная неэкспорта…
Итак, я привел небольшой пример. В моем первом запуске BAR
не установлен и, как ожидается, ничего не печатается; однако затем я устанавливаю переменную среды. Я не ожидал, что ничего будет напечатано, потому что я использую директиву unexport
, за исключением того, что значение dogs
все еще печатается.
$ cat Makefile
unexport BAR
foo:
@echo BAR=$(BAR)
$ make
BAR=
$ export BAR=dogs
$ make
BAR=dogs
$ uname -a
Darwin Maxs-MacBook-Pro-Work.local 19.2.0 Darwin Kernel Version 19.2.0: Sat Nov 9 03:47:04 PST 2019; root:xnu-6153.61.1~20/RELEASE_X86_64 x86_64
$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
$ man make | grep unexport
Что здесь происходит? Почему собаки все еще напечатаны?