Структура каталога проекта со сторонними компонентами - PullRequest
8 голосов
/ 21 апреля 2011

Я должен поддерживать старое программное обеспечение, написанное на Delphi.Исходное дерево - настоящий беспорядок.Я пытаюсь сделать 2 вещи: создать чистую структуру каталогов и настроить автоматический процесс сборки.

Сейчас я создал следующее дерево каталогов

\Project
     \build\output   
     \dist\release
     \dist\debug
     \doc
     \env
     \res
     \src

\src каталог содержит*.pas и *.dfm файлы и project.dpr.Различные ресурсы (значки, изображения и шрифты) находятся в каталоге \res.\env используется для создания различных сред для целей отладки.IDE была настроена для встраивания project.exe в этот каталог.Скрипты сборки хранятся в папке build.Эти сценарии производят распространение продукта (с отладочной информацией и без нее в exe) в папках dist\release и dist\debug с помощью dcc32.exe.build\output используется для сохранения файлов dcu во время процесса сборки внутри IDE или внутри скрипта сборки.

В моем подходе есть небольшой недостаток.Я не могу начать со свежего компьютера, проверить код из моего репо, начать сборку скрипта и получить готовый к использованию дистрибутив проекта.Мне нужно сначала открыть IDE, установить необходимые компоненты (например, RXLib и MemoEx), настроить пути к библиотекам и так далее.Только после этого я могу запускать свои сценарии сборки.

Это не было большой проблемой до прошлой недели.Я изменил сторонний компонент, чтобы исправить ошибку (этот компонент больше не поддерживается :-(), поэтому я должен добавить код этого компонента в структуру моего проекта. На этом этапе, если я извлечу изрепозиторий мне нужно проверить, были ли изменения в коде сторонних библиотек. Если код библиотек был изменен, мне нужно перекомпилировать компоненты и переустановить их.

Вопросы

  1. Есть лиЕсть ли способ переустановить компоненты в Delphi 7 из командной строки? Есть ли способ сделать это без жесткого пути установки D7?
  2. Как бы вы сохранили код компонентов третьей части в дереве проекта?
  3. Где я должен разместить bpl и dcu, которые будут создаваться при сборке компонентов. Должен ли я поместить их в Project\build\output? Или лучше разместить выходные данные в другом месте (не отменять настройки Delphi), ноизменить путь к библиотеке в конфигурации проекта?

Ответы [ 3 ]

6 голосов
/ 21 апреля 2011
  1. Вам просто нужно скомпилировать пакет с помощью компилятора командной строки delphi. Если в вашем PATH указан путь к бину Delphi, вам не нужно жестко кодировать путь установки. Если ваша система сборки может читать из реестра, вы получите путь, например, HKEY_LOCAL_MACHINE\SOFTWARE\CodeGear\BDS\6.0\RootDir (в данном случае Delphi 2009).

  2. Я бы добавил еще одну ветку components с подветвями для каждого пакета. Не смешивайте их с вашими проектами.

  3. Из моего опыта лучше всего держать их в пункте назначения delphi (где это зависит от версии delphi).

4 голосов
/ 22 апреля 2011

Обновление: Заметил установку из командной строки Запрос части вопроса.

Вы не можете действительно установить из командной строки, но было бы легко что-то построить это сделал это. Вы можете скомпилировать пакеты, используя DCC32.EXE.

Установка компонентов контролируется записями реестра. Расположение в реестре отличается для каждой версии Delphi, но оно следует одному и тому же базовому шаблону. Примеры:

Delphi 2007 HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Known Packages Delphi XE 'HKEY_CURRENT_USER \ Software \ Embarcadero \ BDS \ 8.0 \ Известные пакеты'

Мы обновляем это с помощью FinalBuilder, после того как мы собрали все сторонние компоненты. Это упрощает синхронизацию каждого разработчика.

Что касается структуры каталогов, я думаю об управлении версиями заранее и делаю следующее.

Корневой каталог ...

C:\dev\trunk\

Это позволяет мне создавать ветви в удобном формате.

C:\dev\branch1\

Оттуда я делаю следующее:

Я использую общий каталог для \ Bin и \ DCU, так как много занимаюсь разработкой пакетов многие из которых должны быть загружены во время разработки. Это предотвращает необходимость добавления многих каталоги к системному пути, чтобы Delphi был доволен.

\output\DelphiXE\Bin
\output\DelphiXE\Dcu

Это может быть улучшено, если нужно, чтобы это было так:

\output\DelphiXE\Release\Bin
\output\DelphiXE\Release\Dcu
\output\DelphiXE\Debug\Bin
\output\DelphiXE\Debug\Dcu

Для каждого проекта я делаю это, хотя часто я размещаю более одного проекта в одном каталог, если полагаться на большинство одного и того же кода.

\project\ (DPR/DPK Here)
\project\source (if the project is small, if not I break it out further)
\project\forms\
\project\classes\
\project\datamodules\
\project\resources\
\project\install\ (Install Scripts)
etc...

Наконец-то для компонентов и кода, общих для разных проектов.

\Commonlib\ (Directory for my code that common among projects)
\Components\3rdPartyName\
\Components\3rdPartyName2\
\Components\3rdPartyName3\

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

В довершение всего я создаю переменную окружения для

C: \ DEV \ ТРАНК \

Затем я использую переменную окружения в пути к системной библиотеке. Как это:

%MYCODE%components\3rdParty1;%MYCODE%components\3rdParty2\

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

3 голосов
/ 21 апреля 2011

1: Да и нет, вы можете создать свои компоненты для установки из командной строки (где «из командной строки» означает устанавливать их программно, если вам действительно нужна командная строка, вы можетенужно написать инструмент).Сторонние компоненты обычно поставляются с установщиком, который делает больше, чем просто устанавливает и регистрирует компоненты.Теоретически вы можете автоматизировать все, что делает установщик, и, по сути, перепаковать компонент для своего собственного использования, но при этом вы можете столкнуться с юридическими барьерами.

2: сторонние компоненты не связаны с проектомХранить эти файлы в каталоге проекта не очень хорошая идея.Что происходит, когда вы повторно используете те же компоненты в другом проекте?Копируете ли вы все исходные файлы в новый проект?Для моей собственной работы все сторонние компоненты установлены в одной папке, отдельно от каталога любого проекта, и я держу эту папку под контролем версий.

3: Использование отдельного выходного каталога для каждого проектахорошая идея, это делает использование условной компиляции намного проще.Я бы предложил отдельные выходные каталоги для отладки и выпуска.Что касается сторонних BPL, они также не являются частью проекта, потому что ни один проект не "владеет ими".

...