Variables 如何在makefile中的每个循环的其他make变量中使用foreach变量?

Variables 如何在makefile中的每个循环的其他make变量中使用foreach变量?,variables,makefile,gnu-make,Variables,Makefile,Gnu Make,假设我在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:

假设我在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)

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

make run VAR=$(VAR)
或者在构建变量时使用
CONFIGRATION

LOG_DIR=CONFIG_$(CONFIGRATION)

将变量传递给sub make可以完美地工作。有没有办法自动将所有此类变量传递给子生成目标?您必须定义“此类变量”的含义。。。所有哪些变量?
LOG_DIR=CONFIG_$(CONFIGRATION)