Проблема make-файла с условно используемым в определении используемым в командах частью правила - PullRequest
4 голосов
/ 23 октября 2008

У меня есть раздел make-файла, который имеет такую ​​структуру:


bob:
ifdef DEBUG
    @echo running
endif
    @echo chug chug chug
ifdef DEBUG
    @echo done
endif    

bobit:
    @echo "before"
    @make bob
    @echo "after"

Здесь я значительно упрощаю, все эхо на самом деле являются нетривиальными блоками команд, и есть более условные вещи, но это отражает суть моей проблемы.

По техническим причинам, я не хочу сейчас вдаваться, мне нужно избавиться от этого субмаха, но поскольку эхо представляет нетривиальные объемы кода, я не хочу просто копировать и пропускать тело Боба в место субмаки.

В идеале я хотел бы сделать что-то вроде этого


define BOB_BODY 
ifdef DEBUG
    @echo running
endif
    @echo chug chug chug
ifdef DEBUG
    @echo done
endif
endef

bob:
    $(BOB_BODY)

bobit:
    @echo "before"
    $(BOB_BODY)
    @echo "after"

К сожалению, условные выражения, похоже, меня терзают, они выдают ошибки "ifdef: Команда не найдена", я пытался обойти это с помощью различных комбинаций eval и call, но, похоже, не могу придумать, как это сделать работа.

Как мне заставить это работать? и это даже правильный подход к проблеме?

Ответы [ 2 ]

2 голосов
/ 24 октября 2008

Я исправил это, используя вместо этого условные выражения bash, что на самом деле имеет определенный смысл, поскольку мы играем с командами, а не создаем правила.

Так что мое идеальное решение сверху становится чем-то вроде

<code>
define BOB_BODY
    @if [[ -n "$(DEBUG)" ]]; then \
        echo running; \
    fi;
    @echo chug chug chug
    @if [[ -n "$(DEBUG)" ]]; then \
        echo done; \
    fi
endef</p>

<p>bob:
    $(BOB_BODY)</p>

<p>bobit:
    @echo "before"
    $(BOB_BODY)
    @echo "after"
0 голосов
/ 06 октября 2011

Вы можете просто изменить порядок ifdef / define:

ifdef DEBUG
  define BOB_BODY 
    @echo running
    @echo chug chug chug
    @echo done
  endef
else 
  define BOB_BODY 
    @echo chug chug chug
  endef
endif

UPDATE

define CHUG
  @echo chug chug chug
endef

ifdef DEBUG
  define BOB_BODY 
    @echo running
    $(CHUG)
    @echo done
  endef
else 
  define BOB_BODY 
    $(CHUG)
  endef
endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...