Рецепты на самом деле являются командами оболочки. Вы не можете установить переменную 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
является рекурсивно раскрытой переменной, на самом деле это просто макрос.