Когда я только пришёл работать в 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) я легко могу хвастаться удобством своего рабочего места. =)
Да, действительно удобно, когда информация четко структурирована.
ОтветитьУдалитьТакже понравилось совместное грамотное использование двух программ для достижения эффектного результата
Респект.
Я для "Больше не возникает ситуаций, когда в путях попадаются дублирующиеся .dcu или .bpl файлы." для dcu разные папки, а для bpl использую батники, которые правят реестр перед запуском проекта :). Вкраце, заменяет ветку "Known Packages" и задают локальную переменнуб окружения Path.
ОтветитьУдалитьА ты пользуешься доп средствами в Delphi?
ОтветитьУдалитьНапример я использую GExperts и CnWizards.
Так вот в CnWizards есть пункт "Project Dir Builder..."
Предлагает такую структуру папок
Что насчет такой организации скажите?
Я сейчас на перепутье, думаю как у себя код организовать, а то файлов уже много и становиться неудобно.
http://www.ljplus.ru/img4/r/3/r3code/cnWizDirs.jpg
ОтветитьУдалитьСтруктура папок в CnWizards “Project Dir Builder…”
Да, я использую следующие эксперты:
ОтветитьУдалитьgExperts, cnWizards, DDevExtensions, Modelmaker Code Explorer, DelphiSpeedUp. Впрочем, из каждого эксперта я в основном использую только пару функций. =)
Я видел Project Dir Builder… Но не использую. У меня мало проектов, и большинство из них имеют уже устоявшуюся структуру, подобную описанной в посте. Структура предложенная по дефолту в CnPack, для меня слишком избыточна.
Так или иначе, я думаю, что особо на тему структуры папок заморачиваться не стоит. Главное чтобы было удобно и был порядок. =)
Так Project Dir Builder можно настроить под себя, просто чтобы потом свою структур папок им генерить, но это так примечание.
ОтветитьУдалитьВсе равно все это о красоте, а каждый по своему ее видит )
Старая статья. Но все же - где у вас хранится сам want со скриптами сборки? Он один для всех проектов - универсальный? Или тоже, со всем остальным в репозитории?
ОтветитьУдалитьWant установлен локально, хотя он небольшой и его тоже можно в репозиторий бросить. А скрипты хранятся в репозитории.
ОтветитьУдалитьУ меня есть один скрипт с конфигурируемыми dcc-Target-ами (для сборки компонентов, проекта, копирования ресурсов) и один большой скрипт со всеми компонентами и проектами который вызывает Target-ы с нужными параметрами.