如何从我的 makefile 中的另一个文件加载环境变量?

How can I load environment variables from another file in my makefile?

我想在 运行 我的 makefile 命令时设置环境变量,但理想情况下,这些变量将存储在另一个文件中。

./Makefile

_init_dev:
    . ./config/dev-env

diff-dev: _init_dev
    cdk diff

deploy-dev: _init_dev
    cdk deploy

./config/dev-env

export HELLO_CDK_DEPLOY_ENVIRONMENT=dev

首先我尝试使用 source 加载变量,但是失败并显示消息:

make: source: Command not found

我理解这是因为 make 运行s sh 而不是 bash.

然后我尝试在我的配置文件前面添加 . 以尝试以这种方式加载变量。

两种方法均无效。当我 运行 我的 cdk 命令时,我可以从输出中看到环境变量尚未设置。

任何人都可以建议如何让它发挥作用吗?

makefile 中的每个配方行都是 运行 在它自己的 shell 中。环境变量修改当前 shell,但当 shell 退出时,这些更改消失。因此,一个配方设置环境变量是完全不可能的,然后在另一个配方中可见。

如果您希望这些变量可用,您必须在每个配方行中获取它们,如下所示:

diff-dev:
        . ./config/dev-env && cdk diff

deploy-dev:
        . ./config/dev-env && cdk deploy

您可以将其放入变量中,例如:

CDK = . ./config/dev-env && cdk

diff-dev:
        $(CDK) diff

deploy-dev:
        $(CDK) deploy

或者,如果您的 dev-env 文件是一种足够简单的格式(例如您展示的格式),它既可以用作 makefile 又可以用作 shell 脚本,您可以将其包括在内:

include ./config/dev-env

diff-dev:
        cdk diff

deploy-dev:
        cdk deploy

但这只适用于 非常 有限的 dev-env 内容(基本上是简单地将变量赋值给静态字符串)。