无法使用我在规则内设置的变量

时间:2012-02-08 22:58:12

标签: makefile

我正在尝试修复makefile的问题。如果您在下面看到,我在规则中设置了SUBDIR的值,但是当它到达下一行时它没有设置。我已使用输出警告验证了subst命令是否正确,但似乎下一行上的命令是在执行上一行之前生成的。这可能吗?我做错了什么?

$(CppObj):$(OBJPATH)/%.$(OBJ_EXT): $(CPPPATH)/%.cpp
@$(MKDIR) $(OBJPATH)
@$(RM) $@
SUBDIR = $(subst $(OBJPATH),,$(@D))
$(CC) $(C++FLAGS)  $(CCOMP_ONLY_FLAG)  $<  $(COBJ_NAME_FLAG)$(OBJPATH)$(SUBDIR)$(@F) 

1 个答案:

答案 0 :(得分:1)

食谱实际上是shell命令。你不能在它们里面设置一个Make变量(好吧,除了使用eval function)。

但是将它设置在规则之外并像往常一样在食谱中引用它不是问题:

SUBDIR = $(subst $(OBJPATH),,$(@D))

$(CppObj):$(OBJPATH)/%.$(OBJ_EXT): $(CPPPATH)/%.cpp
    @$(MKDIR) $(OBJPATH)
    @$(RM) $@
    $(CC) $(C++FLAGS)  $(CCOMP_ONLY_FLAG)  $<  $(COBJ_NAME_FLAG)$(OBJPATH)$(SUBDIR)$(@F)

只要SUBDIR是递归扩展变量,它就可以正常工作,实际上它只是一个宏。