Главная > Delphi, Советы, Статьи > О пользе MSBuild в Delphi

О пользе MSBuild в Delphi

Рано или поздно в любых, более или менее серьезных проектах встает необходимость в автоматической компиляции или компиляции в один шаг. Зачем? Самая элементарная причина: чтобы быстро скомпилировать проект, не открывая его в среде. Например, был разработан крупный проект, включающий не один десяток компонентов, модулей, библиотек. Среда во время разработки сильно обросла посторонними и собственными компонентами и становится трудно различить, какой компонент используется в данном проекте, а какой — нет. Переносимости у проекта в данном случае никакой. На другом компьютере с установленной средой Delphi его не получится скомпилировать: придется переносить и устанавливать все необходимые компоненты, причем вспоминать, какой из них нужен, а какой нет. Это крайне неудобно, а если еще принять во внимание, что данный процесс подвержен ошибкам, то становится совсем невесело.

Издревле эту проблему решали с помощью make-файлов, которые были придуманы в Bell Labs, вероятно для сборки первых юниксов. Вместе с Delphi поставлялась и поставляется консольная утилита make.exe, которая и занимается сборкой проекта используя makefile. Но данный подход имеет существенный недостаток: makefile нужно писать вручную, в Delphi нет инструментов для его написания. А это значит, что придется задавать вручную пути ко всем компонентам, описывать параметры компиляции, директории для вывода промежуточных (DCU, OBJ) и конечных файлов (EXE, DLL) файлов.

К сожалению, такой подход долгое время был единственным возможным способом автоматической компиляции проектов. Несмотря на то, что все параметры, использующиеся средой Delphi для компиляции, всегда сохранялись вместе с проектом. До Delphi 7 включительно это были *.cfg и *.dof-файлы. В первом сохранялись параметры компиляции, а во втором все опции диалога Project Options. Потом появились файлы *.bdsproj, где хранилась вся информация о проекте. Но это не дало никаких преимуществ: компилятор DCC32 не понимает этих файлов и соответственно автоматическая компиляция невозможна.

Серьезный сдвиг произошел в Delphi 2007, где используется MSBuild Engine для компиляции проектов. Как оказалось, это дает именно то что нужно.

В Delphi 2007 на смену файлам *.bdsproj пришли файлы *.dproj (Delphi-проекты, для C++ Builder 2007 они имеют расширение *.cbproj). Эти файлы не просто содержат параметры проекта, они заодно и являются файлами инструкций сборки для MSBuild. «Скормив» такой файл MSBuild мы сможем скомпилировать проект так же, как если бы мы компилировали его в среде Delphi: с учетом всех путей, конфигураций, опций компилятора и используемых директорий.

С помощью MSBuild процесс автоматической сборки проекта становится до элементарного простым. Составляем файл Build.cmd примерно такого содержимого:

call rsvars.bat

msbuild MyProject.dproj /p:configuration=Release

Первая строчка вызывает файл rsvars.bat. Он находится в $(BDS)Bin и содержит переменные среды для MSBuild. Затем вызывается сам MSBuild, причем указывается конфигурация Release.

Таким образом мы получили простой и удобный инструмент, который позволяет легко, в один шаг скомпилировать проект любой сложности точно так же просто, как это делается в среде Delphi.

Замечание: в Delphi 2009 конфигурация передается параметром config вместо configuration. Таким образом комманда компиляции будет выглядеть:

call rsvars.bat

msbuild MyProject.dproj /p:config=Release

Delphi, Советы, Статьи ,

  1. 6 Февраль 2010 в 14:45 | #1

    Также желательно добавлять команду /t:rebuild — чтобы полностью пересобрать проект и включить в него все обновленные ресурсы и файлы (при обычной компиляции эти они могут не обновиться).

  1. Пока что нет уведомлений.