我想编写一个包含以下先决条件的makefile:
syncdb: apps/%/models.py
manage.py syncdb %
touch syncdb
(或resetdb,但我们只使用空的models.py和syncdb)
但是这不起作用,它每次都会更新syncdb。如何制定检查models.py
文件的时间戳并运行syncdb命令的规则以及更新models.py的文件夹?
manage.py syncdb app-a app-b app-c ...
注意:我知道South更适合架构迁移,但在这里我只想在Makefile中有一个工作规则。
答案 0 :(得分:1)
我会尝试使用每个应用程序触摸的文件来符合模式规则。
apps/%/syncdb: apps/%/models.py
manage.py syncdb $*
touch $@
然后,主规则将依赖于所有应用程序syncdb。
all_syncdb: apps/one/syncdb apps/two/syncdb ...
或者如果您的所有应用都有变量:
APPS = one two ...
APPSSYNCDB = $(patsubst %,apps/%/syncdb,$(APPS))
all_syncdb: $(APPSSYNCDB)
答案 1 :(得分:1)
GNU make的$?似乎是为了这份工作。假设MODELS变量包含所有apps / * / models.py文件(例如通过通配符函数),您可以声明:
syncdb : $(MODELS)
manage.py syncdb $(dir $?)
当apps / one / models.py和apps / two / models.py发生变化时,调用将是
manage.py syncdb apps/one apps/two