Чтение пользовательского ввода в скрипте Makefile - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть очень простой Makefile (который просто рекурсивно вызывает другой подкаталог make):

all:
    cd addons/godot-haskell-plugin && make && cd -
run:
    cd addons/godot-haskell-plugin && make run && cd -

Что бы я хотел сделать, это

  1. Проверьте, определена ли переменная оболочки ENV_VAR.
  2. Если это так, тогда запустите Makefile как обычно (то есть ENV_VAR=1 make all должен работать точно так же, как make all выше).
  3. Если это не так, то запросите у пользователя сообщение «Предупреждение: ENV_VAR не определен; продолжить? [Y / n]», где ввод «Y» передает make all и make run как обычно, и ввод "n" просто выводит сообщение и выходит.

Я знаю, что для этого в bash вы должны использовать комбинацию функций echo и read. Но неясно, как это сделать в Make.

1 Ответ

0 голосов
/ 10 сентября 2018

Make на самом деле не предназначен для того, чтобы быть интерактивным, но вы можете использовать его.

Существует более одного способа сделать это, но, поскольку вы, кажется, хотите, чтобы это поведение было специфичным для некоторых целей (all и run), я бы добавил цель PHONY, которая взаимодействует с пользователем и, возможно, прерывает работу. Make:

all run: check

.PHONY: check
check:
ifndef ENV_VAR
    @echo Warning: ENV_VAR isn\'t defined\; continue? [Y/n]
    @read line; if [ $$line == "n" ]; then echo aborting; exit 1 ; fi
endif

Обратите внимание, что я использую условное выражение Make для одной переменной и bashусловно для другого.Вы можете использовать любой из них, но в этом случае это самый чистый способ.

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