Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


среда, 20 августа 2008 г.

Организация структуры папок при работе в Delphi

структура директорий при работе с Delphi

Когда я только пришёл работать в N два года назад, мне достался довольно старый проект на Дельфи 6, с которым до меня успели проработать программиста три. Мне очень понравилась идея организации структуры папок проекта. Работая с несколькими большими проектами я успел оценить по достоинству преимущества такого подхода. И именно о структуре папок я и хочу сегодня поговорить.

Все проекты у меня хранятся в одной папке C:\Work. Сюда извлекаются копии проектов из SVN-хранилища.

Сейчас я работаю с несколькими проектами, хранящимися в разных репозиториях, и папка Work у меня выглядит так:

c:\Work\Organizer - большой рабочий проект из первого репозитория
c:\Work\BigApplication - большой рабочий проект из второго репозитория
c:\Work\LazyProject - мой личный проект из репозитория code.google.com

Некоторые проекты довольно велики, и для компиляции требуют установки многих сторонних библиотек, причём строго определённых версий. На примере проекта Organizer я покажу внутреннюю структуру папок:

c:\Work\Organizer\Build - это каталог для скомпилированных файлов
c:\Work\Organizer\Components - это каталог с исходниками компонент необходимых для компиляции Organizer-a
c:\Work\Organizer\Organizer_src - каталог с исходниками самого проекта
c:\Work\Organizer\Docs - каталог для документации проекта
c:\Work\Organizer\Pictures - каталог с иконками и картинками для этого проекта

Подробнее о папке c:\Work\Organizer\Build.

Это единственная папка, которая не связана с SVN-хранилищем. Она создаётся перед первой компиляцией проекта. И именно в ней хранятся все генерируемые компилятором данные. Она имеет следующую структуру:

c:\Work\Organizer\Build\Bin - папка для .exe файлов
c:\Work\Organizer\Build\Bpl - папка для .bpl файлов
c:\Work\Organizer\Build\Dcp - папка для .dcp файлов
c:\Work\Organizer\Build\Dcu - папка для .dcu файлов
c:\Work\Organizer\Build\Res - папка для .res файлов

Для автоматической сборки проекта на работе я использую want. Именно want создаёт папку Build со всей вложенной структурой, компилирует все библиотеки и связанные проекты, складывает .dcu, .bpl, .dcp и .exe в соответствующие папки. И он же копирует .res и .dfm файлы в папку Res. Delphi к сожалению такие задания выполнять не умеет. Использованию want я как-нибудь посвящу отдельный пост.

 

А теперь собственно о преимуществах:

1) Я знаю где находятся все, абсолютно все файлы проекта.
2) Я легко могу перекомпилировать любой из проектов, включая все необходимые ему библиотеки с нужными директивами(спасибо want'у). Причём в любой из версий(спасибо SVN'у).
3) Больше не возникает ситуаций, когда в путях попадаются дублирующиеся .dcu или .bpl файлы.
4) Благодаря продуманной структуре рабочих папок, переключение между проектами(версиями одного проекта), использующими разные(чаще даже несовместимые) версии компонент, занимает несколько минут.
5) Подготовка нового рабочего места для работы с любым из проектов(компиляция и установка всех компонент) занимает где-то час, причём большая часть времени уйдёт на извлечение исходников из репозитория.
6) я легко могу хвастаться удобством своего рабочего места. =)

8 комментариев:

  1. Да, действительно удобно, когда информация четко структурирована.

    Также понравилось совместное грамотное использование двух программ для достижения эффектного результата

    Респект.

    ОтветитьУдалить
  2. Я для "Больше не возникает ситуаций, когда в путях попадаются дублирующиеся .dcu или .bpl файлы." для dcu разные папки, а для bpl использую батники, которые правят реестр перед запуском проекта :). Вкраце, заменяет ветку "Known Packages" и задают локальную переменнуб окружения Path.

    ОтветитьУдалить
  3. А ты пользуешься доп средствами в Delphi?
    Например я использую GExperts и CnWizards.
    Так вот в CnWizards есть пункт "Project Dir Builder..."
    Предлагает такую структуру папок

    Что насчет такой организации скажите?
    Я сейчас на перепутье, думаю как у себя код организовать, а то файлов уже много и становиться неудобно.

    ОтветитьУдалить
  4. http://www.ljplus.ru/img4/r/3/r3code/cnWizDirs.jpg
    Структура папок в CnWizards “Project Dir Builder…”

    ОтветитьУдалить
  5. Да, я использую следующие эксперты:
    gExperts, cnWizards, DDevExtensions, Modelmaker Code Explorer, DelphiSpeedUp. Впрочем, из каждого эксперта я в основном использую только пару функций. =)

    Я видел Project Dir Builder… Но не использую. У меня мало проектов, и большинство из них имеют уже устоявшуюся структуру, подобную описанной в посте. Структура предложенная по дефолту в CnPack, для меня слишком избыточна.

    Так или иначе, я думаю, что особо на тему структуры папок заморачиваться не стоит. Главное чтобы было удобно и был порядок. =)

    ОтветитьУдалить
  6. Так Project Dir Builder можно настроить под себя, просто чтобы потом свою структур папок им генерить, но это так примечание.
    Все равно все это о красоте, а каждый по своему ее видит )

    ОтветитьУдалить
  7. Старая статья. Но все же - где у вас хранится сам want со скриптами сборки? Он один для всех проектов - универсальный? Или тоже, со всем остальным в репозитории?

    ОтветитьУдалить
  8. Want установлен локально, хотя он небольшой и его тоже можно в репозиторий бросить. А скрипты хранятся в репозитории.

    У меня есть один скрипт с конфигурируемыми dcc-Target-ами (для сборки компонентов, проекта, копирования ресурсов) и один большой скрипт со всеми компонентами и проектами который вызывает Target-ы с нужными параметрами.

    ОтветитьУдалить

Постоянные читатели