将环境变量传递给Makefile中的相关目标

时间:2018-09-20 16:30:46

标签: makefile continuous-integration

我在一个项目中有一个Makefile,其外观大致如下:

.PHONY: lint test teamcity

lint:
    # commands here

test:
    # commands here

teamcity: lint test

我在make lintmake test中运行的工具可以通过查看TEAMCITY_VERSION环境变量来确定它们是否在CI(TeamCity)中运行。但是,我们在TeamCity代理的Docker容器中运行它们,因此未设置变量。

我想实现以下目标:

  1. 运行make teamcity时,必须在环境中设置了lint的情况下运行testTEAMCITY_VERSION目标中的命令;
  2. 运行make testmake lint时,不会发生任何特殊情况(不得添加该变量,尽管如果在外部环境中进行了设置,则不必删除该变量)。
  3. li>

我该如何实现?

2 个答案:

答案 0 :(得分:0)

这对您有用吗?

.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 shell环境变量。

答案 1 :(得分:0)

我最终做了以下事情:

import { CronJob } from 'cron';

Meteor.startup(() => {
  new CronJob({
    cronTime: '00 30 02 * * *',
    // use this wrapper if you want to work with mongo:
    onTick: Meteor.bindEnvironment(() => {
      // stuff happens
    })
    start: true,
    timeZone: 'America/Los_Angeles',
  });
});

此处.PHONY: lint test teamcity lint: # commands here test: # commands here teamcity: export TEAMCITY_VERSION=1 teamcity: lint test 被声明为特定于目标的变量,TEAMCITY_VERSION伪指令将其导出到环境中以作为必备目标。