вызовите макрос дважды в вызове foreach в Make - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть макрос, который вызывает цель для каждого семени:

define MY_MACRO
    $(foreach seed, $(shell $(SHELL_EXPORT) seq $(3) $(4)), $(eval $(call TEST_TARGET_MACRO, $(1), $(2), $(seed), FIRST_TARGET_NAME)))
endef

Есть ли способ, которым я могу назвать две разные цели, одна за которой следует другая?Этот вызывает мой FIRST_TARGET_NAME для каждого семени с TEST_TARGET_MACRO.

Как-то так ...

define MY_MACRO
    $(foreach seed, $(shell $(SHELL_EXPORT) seq $(3) $(4)), $(eval $(call TEST_TARGET_MACRO, $(1), $(2), $(seed), FIRST_TARGET_NAME), $(call TEST_TARGET_MACRO, $(1), $(2), $(seed), SECOND_TARGET_NAME)))
endef

, чтобы он eval первый вызов, а затем второй вызов для каждого семени.

Я не могу найти способ сделать это ... или найти что-нибудь в Интернете

1 Ответ

0 голосов
/ 14 ноября 2018

Я не совсем уверен, что вы пытаетесь сделать, но почему вы не можете просто написать 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...