我正在尝试使用makefile
和perl
oneliner
自动创建php类。
我有这个文件document.txt
[ENTITY]
Document
MyDefaultBundle
number:string(200)
issueDate:datetime
expiryDate:datetime
file_path:string(200)
filename:string(200)
description:text
document_type:string(200)
第一行基本上是classname
,第二行是Bundlename
,第三行是fields
我在make文件中使用这个来执行symfony命令来生成类
MYFILE = Entity/document.txt
READ_ENTITY=eval `perl -l -00pe 'y/nr[]/ /d; s/([A-Z]+) (w+) (w+) (.*)/$$1=$$3:$$2nFIELDS="$$4"n/g' $1`
mytest:
$(call READ_ENTITY,$(MYFILE)) && $(SYMFONY_COMMAND) --entity=$$ENTITY --fields="$$FIELDS"
这对一个实体来说运行良好。(我用$$逃脱了$)
现在我的条件是在循环中有多个实体
document.txt
[ENTITY]
Document
MyDefaultBundle
number:string(200)
issueDate:datetime
expiryDate:datetime
file_path:string(200)
filename:string(200)
description:text
document_type:string(200)
[ENTITY]
Document2
MyDefaultBundle
number:string(200)
issueDate:datetime
expiryDate:datetime
file_path:string(200)
filename:string(200)
description:text
document_type:string(200)
[ENTITY]
Document3
MyDefaultBundle
number:string(200)
issueDate:datetime
expiryDate:datetime
file_path:string(200)
filename:string(200)
description:text
document_type:string(200)
所以我想在循环中执行该语句。我不知道如何在make文件中做到这一点。
基本上是用eval
使shell变量ENTITY
与FIELDS
AND,然后在symfony命令行中使用
有什么想法吗??
编辑:
对于上面显示的perl命令document.txt,即输入
perl-command的输出是
ENTITY=MyDefaultBundle:Document
FIELDS="number:string(200) issueDate:datetime expiryDate:datetime file_path:string(200) filename:string(200) description:text document_type:string(200)"
这基本上使它们成为shell变量,这样我就可以用$ENTITY
插入它们
问题是,当我有多个用空格分隔的[ENTITY]时,我不能将其用作覆盖ENTITY VARIABLE的最后一个条目。
我想要一些类似的东西
for [ENTITY] IN document.txt
EXECUTE $(call READ_ENTITY,$(MYFILE)) && $(SYMFONY_COMMAND) --entity=$$ENTITY --fields="$$FIELDS"
因此,在每个循环中,我有不同的ENTITY
和FIELDS
变量
如果您使用makefile模式规则,则此处可能不需要循环。
- 为每个输出php文档创建一个输入文件
-
创建一个模式规则,该规则接受一个输入文件并生成一个php文档。确保该命令生成的文件是目标名称:
# Take input files from Entity/, produce outputs in Documents/ Documents/Document%.php : Entity/document%.txt EXECUTE $(call READ_ENTITY,$<) && $(SYMFONY_COMMAND) --entity=$$ENTITY --fields="$$FIELDS" --output-filename=$@
-
创建一个依赖于需要构建的文档的规则:
all : Documents/Document1.php Documents/Document2.php Documents/Document3.php .PHONY: all
-
调用
make all
。如果目标all
是生成文件中的第一个目标(这是一种约定),那么只需要make
。