假设我在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为空。
我找不到一种方法来在每次执行foreach循环时更新LOG_DIR变量。
有没有办法做到这一点。
发布于 2020-04-08 20:52:47
嗯……?当您调用递归make时,您正在设置变量CONFIGRATION
make run CONFIGRATION=$(VAR)
但在构造变量时,您使用的是$(VAR)
LOG_DIR=CONFIG_$(VAR)
CONFIGRATION
与VAR
不同。您需要将VAR
传递给子pass:
make run VAR=$(VAR)
或者在构建变量时使用CONFIGRATION
:
LOG_DIR=CONFIG_$(CONFIGRATION)
https://stackoverflow.com/questions/61099790
复制相似问题