Установите глобальную переменную динамически в Makefile - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующий код в Makefile, который выполняет ту или иную последовательность команд на основе переменной среды.

generate :
            if test -z "$$VIRTUAL_ENV"; then \
                $(PYTHON) -m fades -V &>/dev/null || $(PYTHON) -m pip install --user fades; $(PYTHON) -m fades -r requirements.txt script.py;"; \
            else \
               python -m pip install -r requirements.txt && python script.py;  \
            fi

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

Моя идея состояла бы в том, чтобы установить переменную динамически (в зависимости от условия, которое было оценено), содержащуюкоманда или другое, которое будет использоваться снова и снова, как alias в Bash.

Это хорошая идея?Можно ли установить глобальный псевдоним в Makefile, чтобы он мог выбирать между двумя интерпретаторами Python на основе переменной среды?

1 Ответ

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

Предполагая, что вы используете GNU make, вы можете сделать это следующим образом:

ifdef VIRTUAL_ENV
  PYCMD = python -m pip install -r requirements.txt && python
else
  PYCMD = $(PYTHON) -m fades -V >/dev/null 2>&1 || $(PYTHON) -m pip install --user fades; $(PYTHON) -m fades -r requirements.txt
endif

generate:
        $(PYCMD) script.py

Примечание. Я изменил &>/dev/null на >/dev/null 2>&1, потому что первый является функцией только для bash и недопустимв POSIX sh, и make (по умолчанию) всегда запускает /bin/sh, что (во многих системах) является POSIX sh.

Я не знаю, почему вы используете python в одном разделе и $(PYTHON) в другом;кажется, вы хотели бы использовать то же самое в обоих, но в любом случае.

...