Предположим, у меня есть следующее: Цепочка зависимостей, каждая из которых может присутствовать или не присутствовать, и каждая из которых устанавливается точно так же (за исключением того, что это строковое имя зависимости).Чтобы избавиться от повторяющегося кода makefile, я создаю прототип следующей функции:
define install_utility =
$(1):
# recursion
$(foreach bar, $(1)_dependencies,$(eval $(call install_utility,$(bar)))
ifeq(`which $(1)`,) # check for existence of dependency
echo will install $(1) # show me make is executing expected commands
endif
endef
foo_dependencies=A B
foo=foo
eval $(call install_utility,$(foo))
# Expected results:
will install A
will install B
will install foo
# Actual result: no error message, just:
... (infinite loop that prints nothing)
И когда я запускаюсь, я получаю следующую ошибку: бесконечный цикл.
Это похоже на действительно простую функциональность.Тем не менее, я испытываю затруднения, заставляя его работать в make.Есть ли способ, которым я "должен" сделать это в make?
Немного повозился ... и получаю различные ошибки в зависимости от того, выложил ли я рекурсию:
$(1):
$(foreach bar, ...
ifeq(`which $(1)`,)
...
# error messages:
make: *** no rule to make target '$(foo_dependencies)
ifeq(`which', needed by 'foo'. Stop.