Автоматизированная сборка проектов на Delphi с помощью WANT

Источник: delphiplus
Игорь Фомин

WANT (sourceforge.net/projects/want) - Open Source система для автоматизированной сборки, тестирования и упаковки проектов, написанных на Borland Delphi (замена make). Система WANT сама написана на Delphi и является аналогом Jakarta Ant для Java.

WANT позволяет выполнять следующие задачи:

  • сборка проекта
  • создание/копирование/удаление каталогов и файлов
  • архивация файлов
  • операции с CVS
  • unit-тестирование
  • операции с ini-файлами
  • запуск приложений

Описание процесса сборки хранится в файле want.xml.

Проект состоит из задач (targets), каждая из которых имеет свое имя и может зависеть от других задач, в таком случае сначала выполняются задачи, необходимые для ее завершения.

Задачи запускаются на исполнение из командной строки:

want.exe <имя_задачи>

Рассмотрим пример использования WANT.

Создайте папку, в ней должны располагаться файлы want.exe и want.xml, проект Delphi с именем Test положите в папку source.

Что же содержит файл описания процесса сборки - want.xml?

Первый тэг - описание проекта и его свойств, корневой папки проекта (basedir) и задачи по умолчанию (default).

<project name="test"
   basedir="."
   default="help">

описываем свойство "дата сборки проекта"

<tstamp>
   <format property="date.build" pattern="yyyy_mm_dd" />
</tstamp>

Перечисляем необходимые свойства. Все свойства задаются в формате имя (name) и значение (value). Можно использовать значения свойств, определенных выше, для это существует формат записи ${имя_свойства}

<property name="src" value="${basedir}/source" />
<property name="tmp" value="${basedir}/tmp" />
<property name="dist.dir" value="${basedir}/dist" />
<property name="dist.name" value="${dist.dir}/test_${date.build}.zip" />
<property name="dist.src.name" value="${dist.dir}/test_src_${date.build}.zip" />

Описываем задачу. Внутри перечисляем, что нужно выполнить. Здесь осуществляется только вывод текста на экран.

<target name="help">
   <echo message="this builds test" />
</target>

Еще одна задача - создание каталогов (mkdir), ее параметр - имя создаваемого каталога (dir).

<target name="prepare">
   <mkdir dir="${dist.dir}" />
   <mkdir dir="${tmp}" />
</target>

Задача компиляции проекта (compile) зависит (depends) от задачи prepare. Порядок исполнения - сначала prepare, потом compile. Задача компиляции включает в себя два этапа: dcc (консольный компилятор) и exec (запуск приложения).

У dcc следующие параметры:

  • Basedir - каталог, относительно которого будет осуществляться компиляция
  • Source - имя проекта Delphi
  • dcuoutput - каталог для dcu файлов
  • warnings - отображение предупреждений компилятора

Параметры exec:

  • Basedir - каталог в котором будет запущена программа
  • Executable - имя программы
  • Arg - аргументы

<target name="compile" depends="prepare">
   <dcc basedir="${src}" source="test.dpr">
     <dcuoutput path="${tmp}" />
     <warnings value="True" />
   </dcc>

   <exec basedir="${src}" defaultfilters="true" executable="upx.exe">
     <arg value="--best" />
     <arg value="-q" />
     <arg value="test.exe" />
   </exec>
</target>

Задачи формирования архивов с исходниками проекта и скомпилированного приложения:

  • Delete - удаление файлов
  • Zip - создание архива. Файлы в него можно добавлять (include) и игнорировать (exclude)
   <target name="dist_src" depends="prepare">
     <delete file="${dist.src.name}" />
     <zip zipfile="${dist.src.name}">
       <include name="${src}/*.pas" />
       <include name="${src}/*.dfm" />
       <include name="${src}/*.dpr" />
       <include name="${src}/*.dof" />
       <include name="${src}/*.res" />
       <include name="${src}/*.cfg" />
       <include name="${src}/*.todo" />
       <include name="want.xml" />
     </zip>
   </target>

   <target name="dist" depends="prepare,compile">
     <delete file="${dist.name}" />
     <zip zipfile="${dist.name}">
       <include name="${src}/*.exe" />
       <include name="${src}/*.mdb" />
       <include name="${src}/*.dbf" />
       <include name="${src}/*.fr3" />
       <include name="${src}/*.ini" />
     </zip>
   </target>

   <target name="all" depends="dist,dist_src">
   </target>
  </project>

Сохраняем файл и в консоли набираем want all. В результате должны выполнится все перечисленные задачи (см. рис).

В случае ошибки при выполнении любой из задач выводится сообщение об ошибке и сборка прекращается.

Остальные действия в WANT описываются аналогично.

На данный момент документации по WANT немного, поэтому лучшим вариантом будет изучение исходников с sourceforge, а также документации на Ant (jakarta.apache.org/ant/index.html).


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=20734