如何为Makefile目标重新分配VAR变量以重新计算FLAGS的值?
解决Makefile中目标特定变量更新FLAGS的问题
你的问题核心在于FLAGS使用了立即展开赋值(:=),这会在定义FLAGS时就把当时的VAR值(空字符串)代入,后续目标中对VAR的重新赋值不会触发FLAGS的重新计算。下面提供两种可行的实现方式:
方法一:改用递归展开变量(推荐)
把FLAGS的赋值从:=改成=,这样FLAGS会在每次被使用时才展开变量,此时会读取目标特定的VAR值:
VAR := FLAGS = --flag=$(VAR) # 递归展开,延迟到使用时计算 target_1: VAR = 1 target_1: $(DEPS_1) $(CMD) $(FLAGS) ... target_2: VAR = 2 target_2: $(DEPS_2) $(CMD) $(FLAGS) ...
执行make target_1时,FLAGS会展开为--flag=1;执行make target_2时则展开为--flag=2。
方法二:为每个目标定义特定的FLAGS
如果不想修改FLAGS的展开方式,可以直接在每个目标下重新定义FLAGS,显式关联目标特定的VAR:
VAR := FLAGS_BASE := --flag=$(VAR) target_1: VAR = 1 target_1: FLAGS = --flag=$(VAR) target_1: $(DEPS_1) $(CMD) $(FLAGS) ... target_2: VAR = 2 target_2: FLAGS = --flag=$(VAR) target_2: $(DEPS_2) $(CMD) $(FLAGS) ...
这种方式更直观,适合需要对不同目标的FLAGS做差异化调整的场景。
内容的提问来源于stack exchange,提问作者k1r1t0
相关产品推荐
相关产品推荐

