Страницы

суббота, 8 ноября 2008 г.

Настройка папок для выходных файлов в Delphi

Обещанный пост о настройке выходных папок в Delphi.

По умолчанию Delphi 7 помещает выходные файлы в C:\Program Files\Borland\Delphi7\Projects\, а Delphi 2009 в C:\Users\Public\Documents\RAD Studio\6.0\. Это что касается bpl и dcp-файлов. Dcu-шки и exe создаются в папке с исходниками. Такая организация мне не нравится, поэтому я перенастраиваю всё под себя.

Краткое содержание:

  1. Добавить переменную окружения содержащую путь до рабочей папки
  2. Добавить в Path путь до новой папки с BPL-ками
  3. Добавить относительные пути до BPL, DCP, RES, DCU папок в Delphi в Library Path
  4. В Default Project Options указать в качестве выходных папок относительные пути до BIN, BPL, DCP, RES, DCU папок.

Подробная инструкция с картинками под катом. =)



Иерархия папок на рабочем местеПару слов об организации папок. Все сторонние компоненты и проекты у меня хранятся в одной папке. Не люблю длинных путей, поэтому создаю отдельную папку в корневом каталоге. Сейчас это d:\work. Я писал ранее, об иерархии папок, но в последнее время пришёл к тому, что удобнее работать с одной папкой Build, чем держать отдельный экземляр для каждого проекта.

d:\work\D2009 - рабочая папка для Delphi 2009 Добавление переменной в Environment Variables
d:\work\D2009\!Build - папка выходных файлов Delphi 2009
d:\work\D2009\!Build\Bin - папка для exe/dll
d:\work\D2009\!Build\Bpl -  папка для BPL-ок
d:\work\D2009\!Build\Dcu - папка для DCU-файлов
d:\work\D2009\!Build\DCP - папка для DCP-файлов
d:\work\D2009\!Build\RES - папка для ресурсов

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

У меня это WORKD2009 = D:\work\D2009.

Потом надо добавить папку для BPL-файлов в PATH. Делается это в том же Environment Variables. К переменной Path я добавил путь %WORKD2009%\Build\Bpl.

Теперь о том, как настроить Delphi. В первую очередь, надо настроить Library.

BPL output directory = {$WORKD2009}\!Build\BPL
DCP output directory = {$WORKD2009}\!Build\DCP

И в Library Path добавить папки:

{$WORKD2009}\!Build\BPL
{$WORKD2009}\!Build\DCP
{$WORKD2009}\!Build\DCU
{$WORKD2009}\!Build\RES

Как найти Library:
Delphi 7: Tools->Environment Options->закладка Library
Delphi 2009: Tools->Options->Environment Options->Delphi Options->Library – Win32 Настройка выходных папок

Форма настройки Library в Delphi 7

Форма настройки Library в Delphi 2009

Форма настройки Library в Delphi 2009

Далее надо настроить опции для проектов по умолчанию. В Delphi 7 это: Project->Options(Shift+Ctrl+F11)->закладка Directories/Conditionals.

  • Output directory = {$WORKD2009}\!Build\BIN
  • Unit output directory = {$WORKD2009}\!Build\DCU
  • Search path = {$WORKD2009}\!Build\DCU
  • Debug souce path - исходники для отладки [с ней я пока не разбирался]
  • BPL output directory = {$WORKD2009}\!Build\BPL
  • DCP output directory = {$WORKD2009}\!Build\DCP

Отметить галочку Default, чтобы текущие настройки стали настройками по умолчанию для всех новых проектов.

Натройка путей проекта в Delphi 7

Форма настройки опций проекта в Delphi 7

Настройка путей проекта в Делфи 2009

Форма настройки опций проекта в Delphi 2009

Вот в принципе и всё.

Примечание 1.

В Delphi есть возможность переопределять переменные окружения, а также создавать новые.

Настройка переменных окружения в Дельфи 7

Примечание 2

При компиляции из IDE, старые проекты будут компилироваться со старыми настройками. Настройки путей проекта хранятся в двух файлах:

Имя проекта.dof(в Delphi 7) - настройки для IDE, если этого файла нет, то Delphi создаёт его автоматически при сохранении проекта.

Имя проекта.cfg - настройки для компиляции из командной строки.

В этих файлах помимо выходных папок хранятся также, номер версии продукта, список используемых runtime package-й, и conditional defines. Если вы точно уверены, что не потеряете ничего важного, то самым простым способом будет удаление dof-файлов. Я однажды так удалил dof-ки проекта, и потом долго пытался понять, почему программа вдруг стала вылетать при старте с неизвестной мне ошибкой. Потом оказалось, что всё это из-за того, что в dof-ке были прописаны несколько важных conditional defines.

Ещё здесь может помочь компиляция с помощью Lazy Delphi Builder, который не учитывает сохранённые в .cfg/.dof выходные папки.

Ссылки по теме:

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

  1. Приветсвую.
    поправь опечатку
    d:\work\D2009\!Build\Bin - папка для BPL-ок
    d:\work\D2009\!Build\Bpl - папка для exe/dll

    не совсем согласен с "что удобнее работать с одной папкой Build, чем держать отдельный экземляр для каждого проекта.", но это для каждого свое. мне удобнее держать в папке bin копию будущего содержимого готовой программы, т.е. файлы конфига, базы данных и тп. , для удобства отладки.

    ОтветитьУдалить
  2. кстати, попробовал MultiProfile . отличная вещь. думаю что буду ей пользоваться для повседневной работы.
    а для быстрых сборок и т.п. Lazy Delphi Builder :)

    ОтветитьУдалить
  3. ctapmex, спасибо, поправил.

    Одна папка Build хороша для BPL-файлов, в том плане, что не придётся добавлять в PATH все папки с BPL-ками.

    ОтветитьУдалить
  4. Для пакетов удобно использовать общие папки для BPL, Dcp, Dcu, Obj, Hpp, Res.
    Dcu, Obj, Hpp неудобно выводить в папки Code Gear\Lib, Include, т.к. можно случайно переписать стандартные файлы. И удалять старьё тоже проще из своей папки.
    Если есть большая обособленная группа пакетов - то можно для них создать отдельные папки (я сделал так для JEDI).

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

    По поводу bpl - я начинаю склоняться к тому, чтобы выводить их сразу в Common Files\Company Shared - и подключать как runtime.

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

    ОтветитьУдалить
  5. Добрый день.
    Не подскажете, как сделать чтобы .dres, .rc, .res сохранялись не в папку проекта а по относительному пути res\? В Output directory for .res files указал res, но она все равно в итоге пустая

    ОтветитьУдалить
  6. "Потом надо добавить папку для BPL-файлов в PATH. Делается это в том же Environment Variables. К переменной Path я добавил путь %WORKD2009%\Build\Bpl"
    восклицательный знак забыли - ...\!Build\...

    ОтветитьУдалить
  7. Спасибо, стало понятнее. А в Embarcadero RAD Studio XE5 нет понятия Environment -> Project:Options:Resource Compiler:Directories and Conditionals.

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