有人可以解释分配给 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 args
在 cmd 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
我知道 := 运算符是一个简单的赋值,它只会被赋值一个,而 = 是一个递归赋值。但是当它们结合在一起时,我很困惑,无法弄清楚这个代码块中发生了什么:
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 args
在 cmd 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