我正在尝试修复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)
答案 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
是递归扩展变量,它就可以正常工作,实际上它只是一个宏。