Невозможно заставить make использовать переменную, которую я установил внутри правила - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь решить проблему с make-файлом.Если вы видите ниже, я устанавливаю значение 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 Ответ

1 голос
/ 09 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...