Я смотрел на другой stack overflow question, и они использовали то, что выглядит быть документированы поведение для Makefiles ... Если у меня есть следующие Makefile:установки переменной с Eval в рецепте Makefile
X=X
all:
@echo [email protected]: $(X)
$(eval X=Y)
@echo [email protected] part2: $(X)
all2:
@echo [email protected]: $(X)
Тогда я бегу :
~> make all2
all2: X
~> make all all2
running all
all: X
all part2: Y
all2: Y
Я бы ожидал $(eval X=Y)
расширить в Makefile разобрать время, и установить оболочки переменной X
быть Y
для этой линии сабельные e (т.е. ничего не делать). Вместо этого он, кажется, оценивается при запуске рецепта all
, плюс, кажется, он задает переменную make. Я просмотрел страницу make man и для онлайн-руководств, но я не могу найти ничего, что описывает это поведение (я использую GNU Make 4.0). Может ли кто-нибудь указать мне на какую-то документацию, описывающую это, или объяснить, что происходит?
Здесь вы можете найти более подробную информацию: http://stackoverflow.com/questions/38224102/make-define-multiple-variables-in-the-same-eval-call. В основном, как сказано в документации GNU, это часть синтаксиса Makefile, оцененная при вызове, поэтому она все еще является переменной Makefile и действительно оценивается в целевом 'all'. Вот документация 'eval': https://www.gnu.org/software/make/manual/html_node/Eval-Function.html – Tim