我可以从变量文件夹创建具有相同名称的先决条件吗?

时间:2011-11-09 15:39:45

标签: django django-models makefile

我想编写一个包含以下先决条件的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中有一个工作规则。

2 个答案:

答案 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