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

© 2006 Игорь Фомин

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

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

Описание процесса сборки хранится в файле 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 следующие параметры:

Параметры exec:

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

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

   <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.

Файл примера

Copyright© 2006 Игорь Фомин
Специально для Delphi Plus


Пожалуйста, оцените статью
Отлично
Хорошо
Средне
Плохо
Очень плохо