Как использовать переменную foreach в другой переменной make для каждого запуска l oop в make-файле? - PullRequest
0 голосов
/ 08 апреля 2020

Предположим, у меня есть цель, состоящая из foreach l oop в make-файле

# variables
CONFIG = 1 2 3
LOG_DIR=CONFIG_$(VAR)

# targets

run:
    running application

run_configs:
    $(foreach VAR, $(CONFIG), make run CONFIGRATION=$(VAR) logging ; )

build_dir:
    mkdir $(LOG_DIR)/

logging: build_dir
    cp logdata/* $(LOG_DIR)/.

При запуске цели foreach

make run_configs

running application with CONFIG=1
making logdata
cp logdata/* CONFIG_/.

Ожидаемый каталог - CONFIG_1, но созданный - CONFIG_

Я понимаю, что make-файл анализируется первым, поэтому переменная LOG_DIR оценивается как CONFIG_, поскольку переменная foreach VAR в это время равна нулю.

Я не могу найти способ обновлять переменную LOG_DIR каждый раз foreach l oop выполняется.

Есть ли способ достичь этого.

1 Ответ

1 голос
/ 08 апреля 2020

Um ...? Когда вы вызываете рекурсивный маркер, вы устанавливаете переменную CONFIGRATION:

make run CONFIGRATION=$(VAR)

, но когда вы создаете переменную, вы используете $(VAR):

LOG_DIR=CONFIG_$(VAR)

CONFIGRATION не совпадает с VAR. Вам нужно либо передать VAR субмаке:

make run VAR=$(VAR)

или использовать CONFIGRATION при создании переменной:

LOG_DIR=CONFIG_$(CONFIGRATION)
...