ПЕРЕПИСАНО (Спасибо @MadScientist за указание на мою путаницу. Я подумал, что лучше всего полностью удалить ошибочную информацию.)
Поскольку $PATH
изначально экспортировалось в *Среда 1006 * make , make гарантируют, что она будет экспортирована в среду любых команд рецепта, которые она запускает.Любое изменение, внесенное в $PATH
в make-файле , будет попадать в среду команд получения, выполняемых make .
Обратите внимание, что это не true для команд, запускаемых через $(shell …)
.Экспортированные переменные сохраняют значения, которые были у них при запуске make .Любые изменения, которые они претерпевают в make-файле, игнорируются в отношении внешних команд.
Как указано в другом месте, одним из обходных путей является явное повторение увеличения $PATH
в любом $(shell …)
my_var := $(shell PATH='${PATH}' which program)
(Удивляет меня. Это ошибка make ? Или, по крайней мере, ошибка документации?)