(Примечание. Это похоже на мой предыдущий вопрос, но, похоже, причина в другом, поэтому я публикую новый вопрос здесь).
Я отлаживаю некоторые make-файлы, которые усеяны очень запутанными eval-файлами. Я хотел бы быть в состоянии точно сбросить то, к чему расширяются eval, и затем назвать evals. Мне нужно сделать это так, чтобы я мог легко включить / выключить отладку, но я обнаружил странное поведение с eval
внутри функции. У меня есть:
FOO := a:=foo
$(eval $(FOO))
$(info a=$(a)) #a=foo -- OK
define eval_dbg
$(info eval_dbg: running [$1]) # $1 is "a:=bar"
$(eval $(1)) # fails - missing seperator...
endef
$(call eval_dbg,a:=bar) #causes error...
$(info a=$a)
Но я получаю:
a=foo
eval_dbg: running [a:=bar]
test2.mk:17: *** missing separator. Stop.
Возможно ли оценить параметр вызова?
** минимальный воспроизводимый пример:**
tmp> more test3.mk
FOO := a:=foo
$(eval $(FOO))
$(info a=$(a))
define eval_dbg
$(info eval_dbg: running [$1])
$(eval $(1))
endef
$(call eval_dbg,a:=bar)
$(info a=$a)
all:
@echo running $@
tmp> make -f test3.mk
a=foo
eval_dbg: running [a:=bar]
test3.mk:10: *** missing separator. Stop.
tmp> 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 x86_64-unknown-linux-gnu