Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Автоматизированная сборка проектов на Delphi


Автор: evilbllodydemon 4.5.2006, 11:30
WANT ( http://sourceforge.net/projects/want) – система автоматизированной сборки проектов, написанных на Delphi, замена make. Является аналогом  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 (http://jakarta.apache.org/ant/index.html)
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)