如何在 makefile 中的每个循环 运行 的其他一些 make 变量中使用 foreach 变量?

How to use foreach variable in some other make variable for every loop run in makefile?

假设我有一个目标,由 makefile 中的 foreach 循环组成

# 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_

我知道 makefile 首先被解析,所以变量 LOG_DIR 被评估为 CONFIG_ 因为此时foreach变量VAR为null。

我找不到在每次执行 foreach 循环时更新 LOG_DIR 变量的方法。

有没有办法实现这个。

嗯……?当您调用递归 make 时,您正在设置变量 CONFIGRATION:

make run CONFIGRATION=$(VAR)

但是当你构建你使用的变量时 $(VAR):

LOG_DIR=CONFIG_$(VAR)

CONFIGRATIONVAR 不同。您需要将 VAR 传递给 submake:

make run VAR=$(VAR)

或在构建变量时使用CONFIGRATION

LOG_DIR=CONFIG_$(CONFIGRATION)