有人可以解释分配给 use_database 的内容吗?

Can someone explain what is being assigned into use_database?

我知道 := 运算符是一个简单的赋值,它只会被赋值一个,而 = 是一个递归赋值。但是当它们结合在一起时,我很困惑,无法弄清楚这个代码块中发生了什么:

use_database := MAIN_DATABASE=sqlite
$(use_database) python3 manage.py makemigrations amlcenter

我的第一个想法是它将 sqlite 分配给 use_database 和 MAIN_DATABASE,但我不认为是这样。然后我认为它将“MAIN_DATABASE=sqlite”分配给 use_database 但这将使第二行:

MAIN_DATABASE=sqlite python3 manage.py makemigrations amlcenter

我觉得这说不通。任何帮助,将不胜感激。这是在 Makefile 中。

use_database := MAIN_DATABASE=sqlite
use_runserver_str := python3 manage.py runserver 0.0.0.0:8050
use_runscript_str := python3 manage.py runscript

db_migrate:  ## Db migrate
    $(use_database) python3 manage.py makemigrations amlcenter
    $(use_database) TEST_MODE=True python3 manage.py migrate

clean: ## Clean Directory
    rm -f db.sqlite3
    rm -rf static/
    rm -rf media/
    rm -f aml.log

dev: clean db_migrate  ## Set up development server with sample data
    if [[ $(use_database) = *"psql"* ]] ; then $(use_database) python3 manage.py flush --noinput; echo 'Flushed psql'  ; fi
    $(use_database) $(use_runscript_str) sample_data_generator

shell 语法 var=value cmd argscmd args.[=15 的执行期间临时将变量 var 设置为值 value =]

显然这将在 Makefile 配方中使用,显然运行的 Python 脚本将检查其环境以获取此变量,可能类似于

import os

# ...
if os.environ('MAIN_DATABASE') == 'sqlite':
    do_sqlitey_things()
# probably else if it's 'mysql', do mysqly things or Postgressy things for 'postgres', etc