如何在 Windows 的 Makefile 中设置环境变量?

问题描述 投票:0回答:2

我有以下 Makefile:

PYTHON = python
.DEFAULT_GOAL = help
help:
    @echo ------------------------------Makefile for Flask app------------------------------
    @echo USAGE:
    @echo   make dependencies           Install all project dependencies
    @echo       make docker             Run Docker
    @echo       make env                Set environment variables
    @echo       make run                Run Flask app
    @echo       make test               Run tests for app
    @echo ----------------------------------------------------------------------------------
dependencies:
    @pip install -r requirements.txt
    @pip install -r dev-requirements.txt
docker:
    docker compose up

env:
    @set CS_HOST_PORT=5000
    @set CS_HOST_IP=127.0.0.1
    @set DATABASE_URL=postgresql://lv-python-mc:[email protected]:5482/Realty_DB
    @set REDIS_IP=127.0.0.1
    @set REDIS_PORT=6379
run:
    ${PYTHON} app.py    test:
    @${PYTHON} -m pytest

set
命令不起作用,环境变量未设置,可能是什么问题?

python windows makefile
2个回答
3
投票

您当然可以设置对 make 将调用的程序有效的环境变量。但是

make
无法为调用 makeshell 设置环境变量。因此,如果您的 makefile 运行一个程序,那么您可以在 makefile 中设置一个环境变量,该变量将在该程序中可见。

顺便说一句,这与 make 无关。这是操作系统的限制(或功能,取决于您的观点)。试试这个实验:

  • 打开终端。
  • 奔跑
    set FOO=bar
  • 运行
    echo %FOO%
    。看到它打印了
    bar
  • same 终端运行
    cmd.exe
  • 启动一个新的 shell
  • 现在就跑吧
    set FOO=nobar
  • 运行
    echo %FOO%
    。看到它打印了
    nobar
  • 现在运行
    exit
  • 退出新 shell
  • 现在运行
    echo %FOO%

您会看到它仍然打印

nobar
,而不是
bar
。这是因为操作系统不允许子程序修改其父程序的环境。

因此,make对此无能为力。


0
投票

尝试:

...
env:
  @echo @echo off > env.bat
  @REM      ===  ^^^ Only SINGLE ONE Sign HERE !!!  ===
  @echo set CS_HOST_PORT=5000 >> env.bat
  @echo set CS_HOST_IP=127.0.0.1 >> env.bat
  @echo set DATABASE_URL=postgresql://lv-python-mc:[email protected]:5482/Realty_DB >> env.bat
  @echo set REDIS_IP=127.0.0.1 >> env.bat
  @echo set REDIS_PORT=6379 >> env.bat
  @REM  === +5 lines below ===
  @echo ${PYTHON} app.py    test: >> env.bat
  @echo echo %ERRORLEVEL%  >> env.bat
  @echo @${PYTHON} -m pytest >> env.bat
  @echo echo %ERRORLEVEL%  >> env.bat
  @del /Q env.bat

run:
  call env.bat
© www.soinside.com 2019 - 2024. All rights reserved.