Передача переменных среды зависимым целям в Makefile - PullRequest
0 голосов
/ 20 сентября 2018

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

.PHONY: lint test teamcity

lint:
    # commands here

test:
    # commands here

teamcity: lint test

Инструменты, в которых я работаю make lint и make test, могут определить, запущены они или нетв CI (TeamCity), посмотрев на переменную окружения TEAMCITY_VERSION.Однако мы запускаем их в контейнере Docker на агентах TeamCity, поэтому переменная не задана.

Я хочу добиться следующего:

  1. При запуске make teamcityкоманды в целях lint и test должны выполняться с установленным в среде TEAMCITY_VERSION;
  2. При выполнении make test или make lint ничего особенного не должно происходить (переменная не должна бытьдобавлен, хотя нет необходимости удалять его, если он установлен во внешней среде).

Как этого добиться?

Ответы [ 2 ]

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

В итоге я сделал следующее:

.PHONY: lint test teamcity

lint:
    # commands here

test:
    # commands here

teamcity: export TEAMCITY_VERSION=1
teamcity: lint test

Здесь TEAMCITY_VERSION объявлено как переменная, специфичная для цели, а директива export экспортирует ее в среду для предварительных целей.

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

Будет ли это работать для вас?

.PHONY: lint test teamcity

lint:
    # commands here

test:
    # commands here

teamcity:
    $(MAKE) TEAMCITY_VERSION=<whatever> lint test

Для второго вызова make в командной строке установлено значение TEAMCITY_VERSION.Таким образом, для этого второго вызова будет установлена ​​переменная TEAMCITY_VERSION make, а также переменная окружения TEAMCITY_VERSION для всех рецептов.

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