Выполнить две команды при условии в течение цикла в make-файле - PullRequest
0 голосов
/ 10 января 2019

Код в моем MakeFile:

for i in $(SUBDIRS); do \
($(MAKE) -C $$i) || (exit $$? && rm -rf bin);  \
done

Если в субмейках произошла ошибка, мне нужно удалить каталог bin. Как выполнить это вместе, то есть как запустить exit $$? и rm -rf bin одновременно? Теперь выполняется только exit $$?.

1 Ответ

0 голосов
/ 10 января 2019
  1. Сохраните код возврата, прежде чем позвонить в rm или выйти.
  2. Запуск выхода внутри () не завершится, потому что он работает в подоболочке. Используйте {}. См. https://www.gnu.org/software/bash/manual/html_node/Command-Grouping.html (Эта страница предназначена для bash, но sh таким же образом.)

Пример:

SUBDIRS := $(wildcard */.)

all:
    @for i in $(SUBDIRS); do \
        $(MAKE) -C $$i || { RETVAL=$$?; rm -rf bin; exit $$RETVAL; }; \
    done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...