makefile读取配方内的重用变量

时间:2015-06-17 18:02:45

标签: makefile

在尝试实施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)不再具有我需要它具有的价值时才能使其工作。我这样做的方法是什么?

1 个答案:

答案 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 $<