2014-02-15 3 views
0

Я пытаюсь автоматизировать создание класса php с помощью makefile и perloneliner.Как сделать цикл в perl для makefile

У меня есть этот файл 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) 

В основном FIRSTLINE является classname, второй является Bundlename и третий является fields

Я использую это в гриме файле выполнить команду Symfony для создания классов

MYFILE = Entity/document.txt 
READ_ENTITY=eval `perl -l -00pe 'y/\n\r[]/ /d; s/([A-Z]+) (\w+) (\w+) (.*)/$$1=$$3:$$2\nFIELDS="$$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 я АМА делает переменную оболочки ENTITY И FIELDS, а затем использовать это в командной строке

Любые идеи симфони ??

РЕДАКТИРОВАТЬ:

Для Perl командовать Document.txt показано выше, то есть вход

Выход Perl coomand является

ENTITY=MyDefaultBundle:Document 
FIELDS="number:string(200) issueDate:datetime expiryDate:datetime file_path:string(200) filename:string(200) description:text document_type:string(200)" 

, который в основном делает их в качестве переменной оболочки таким образом, что я могу вставить их с $ENTITY

Проблема в том, что у меня есть несколько [ENTITY], разделенных пробелом, тогда я не могу использовать это как la st с перезаписью ENTITY VARIABLE.

я хочу некоторые вещи, как

for [ENTITY] IN document.txt 
    EXECUTE $(call READ_ENTITY,$(MYFILE)) && $(SYMFONY_COMMAND) --entity=$$ENTITY --fields="$$FIELDS" 

Так что в каждом цикле у меня есть разные ENTITY и FIELDS переменной

+0

Непонятно, что такое входы и выходы. Если вы можете продемонстрировать пример ввода, то команда, которая генерирует выходные данные и выходные данные, поможет. –

+0

Команда Perl модифицирует 'Entity/document.txt' на месте, тогда команда symfony сканирует ее и производит ... другой файл, это правильно? – Beta

+0

@MaximYegorushkin Я добавил дополнительные сведения – user3147180

ответ

0

Вам не нужна петля здесь, если вы поставите Makefile шаблонных правил для использования.

  1. Создайте один входной файл для каждого выходного документа php.
  2. Создайте правило шаблона, которое принимает один входной файл и создает один документ 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" [email protected] 
    
  3. Создать правило, которое зависит от документов, которые должны быть построено:

    all : Documents/Document1.php Documents/Document2.php Documents/Document3.php 
    .PHONY: all 
    
  4. Invoke make all. Если цель all является первой целью в вашем файле makefile (это соглашение), то только make.

+0

Прежде всего, у меня есть только один 'document.txt', который имеет данные для создания многих файлов PHP. Мне не нужно указывать имя выходного файла, поскольку syfony будет генерировать его из конфигурации внутри 'document.txt'. поэтому input всегда является 'document.txt', а вывод будет php-файлом, созданным symfony. поэтому один запуск даст один файл. [ENTITY] содержит всю конфигурацию для одного файла php. Для одной конфигурации [ENTITY] я могу создать одно Entity ok. Но я хочу иметь несколько тегов '[ENTITY]' в 'document.txt', так что для каждого отдельного тега [ENTITY] я получаю файл seprate, имя выходного файла которого будет с первой строки после тега [ENTITY] – user3147180

Смежные вопросы