在尝试实施nonrecursive make时,我有一个看起来像的Rules.mk:
############
# Enter Stack
############
sp := $(sp).x
dirstack_$(sp) := $(d)
d := $(dir)
.. setup things like OBJECTS_$(d), DEPS_$(d), TARGET_$(d), etc ...
############
# Exit Stack
############
-include $(DEPS_$(d))
d := $(dirstack_$(sp))
sp := $(basename $(sp))
我想设置的变量之一是:
INCLUDE_PATH_$(d) := -Isomething -Isomething/else ...
要在编译规则中使用:
$(OBJDIR_$(d))/%.o : $(d)/%.cpp $(OBJDIR_$(d))/%.d
$(CC) $(CFLAGS) $(INCLUDE_PATH_$(d)) -o $@ -c $<
但这不起作用 - $(INCLUDE_PATH_$(d))
直到稍后才会展开 - 当$(d)
不再具有我需要它具有的价值时才能使其工作。我这样做的方法是什么?
答案 0 :(得分:1)
您可以使用特定于目标的变量
$(OBJDIR_$d)/%.o : INCLUDES := $(INCLUDE_PATH_$d)
$(OBJDIR_$d)/%.o : $d/%.cpp $(OBJDIR_$d)/%.d
$(CC) $(CFLAGS) $(INCLUDES) -o $@ -c $<
以下可能更标准/更灵活(假设CPPFLAGS
未设置为递归扩展),但这取决于您的需求
$(OBJDIR_$d)/%.o : CPPFLAGS += $(INCLUDE_PATH_$d)
$(OBJDIR_$d)/%.o : $d/%.cpp $(OBJDIR_$d)/%.d
$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<