Я не совсем уверен, что вы пытаетесь сделать, но почему вы не можете просто написать eval / call дважды?Вот так:
define MY_MACRO
$(foreach seed, $(shell $(SHELL_EXPORT) seq $(3) $(4)), \
$(eval $(call TEST_TARGET_MACRO, $(1), $(2), $(seed), FIRST_TARGET_NAME) \
$(eval $(call TEST_TARGET_MACRO, $(1), $(2), $(seed), SECOND_TARGET_NAME))))
endef
Вот мой простой, полный пример:
TEST_TARGET_MACRO = all:: ; $(info 1=$1 2=$2 3=$3 4=$4)
define MY_MACRO
$(foreach seed, $(shell seq $(3) $(4)), \
$(eval $(call TEST_TARGET_MACRO, $(1), $(2), $(seed), FIRST_TARGET_NAME) \
$(eval $(call TEST_TARGET_MACRO, $(1), $(2), $(seed), SECOND_TARGET_NAME))))
endef
$(call MY_MACRO,foo,bar,2,5)
и вот результат, который я и ожидал:
1= foo 2= bar 3= 2 4= FIRST_TARGET_NAME
1= foo 2= bar 3= 2 4= SECOND_TARGET_NAME
1= foo 2= bar 3= 3 4= FIRST_TARGET_NAME
1= foo 2= bar 3= 3 4= SECOND_TARGET_NAME
1= foo 2= bar 3= 4 4= FIRST_TARGET_NAME
1= foo 2= bar 3= 4 4= SECOND_TARGET_NAME
1= foo 2= bar 3= 5 4= FIRST_TARGET_NAME
1= foo 2= bar 3= 5 4= SECOND_TARGET_NAME
make: 'all' is up to date.