Обещанный пост о настройке выходных папок в Delphi.
По умолчанию Delphi 7 помещает выходные файлы в C:\Program Files\Borland\Delphi7\Projects\, а Delphi 2009 в C:\Users\Public\Documents\RAD Studio\6.0\. Это что касается bpl и dcp-файлов. Dcu-шки и exe создаются в папке с исходниками. Такая организация мне не нравится, поэтому я перенастраиваю всё под себя.
Краткое содержание:
- Добавить переменную окружения содержащую путь до рабочей папки
- Добавить в Path путь до новой папки с BPL-ками
- Добавить относительные пути до BPL, DCP, RES, DCU папок в Delphi в Library Path
- В Default Project Options указать в качестве выходных папок относительные пути до BIN, BPL, DCP, RES, DCU папок.
Подробная инструкция с картинками под катом. =)
Пару слов об организации папок. Все сторонние компоненты и проекты у меня хранятся в одной папке. Не люблю длинных путей, поэтому создаю отдельную папку в корневом каталоге. Сейчас это d:\work. Я писал ранее, об иерархии папок, но в последнее время пришёл к тому, что удобнее работать с одной папкой Build, чем держать отдельный экземляр для каждого проекта.
d:\work\D2009 - рабочая папка для Delphi 2009
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
Далее надо настроить опции для проектов по умолчанию. В 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 2009
Вот в принципе и всё.
Примечание 1.
В Delphi есть возможность переопределять переменные окружения, а также создавать новые.
Примечание 2
При компиляции из IDE, старые проекты будут компилироваться со старыми настройками. Настройки путей проекта хранятся в двух файлах:
Имя проекта.dof(в Delphi 7) - настройки для IDE, если этого файла нет, то Delphi создаёт его автоматически при сохранении проекта.
Имя проекта.cfg - настройки для компиляции из командной строки.
В этих файлах помимо выходных папок хранятся также, номер версии продукта, список используемых runtime package-й, и conditional defines. Если вы точно уверены, что не потеряете ничего важного, то самым простым способом будет удаление dof-файлов. Я однажды так удалил dof-ки проекта, и потом долго пытался понять, почему программа вдруг стала вылетать при старте с неизвестной мне ошибкой. Потом оказалось, что всё это из-за того, что в dof-ке были прописаны несколько важных conditional defines.
Ещё здесь может помочь компиляция с помощью Lazy Delphi Builder, который не учитывает сохранённые в .cfg/.dof выходные папки.
Приветсвую.
ОтветитьУдалитьпоправь опечатку
d:\work\D2009\!Build\Bin - папка для BPL-ок
d:\work\D2009\!Build\Bpl - папка для exe/dll
не совсем согласен с "что удобнее работать с одной папкой Build, чем держать отдельный экземляр для каждого проекта.", но это для каждого свое. мне удобнее держать в папке bin копию будущего содержимого готовой программы, т.е. файлы конфига, базы данных и тп. , для удобства отладки.
кстати, попробовал MultiProfile . отличная вещь. думаю что буду ей пользоваться для повседневной работы.
ОтветитьУдалитьа для быстрых сборок и т.п. Lazy Delphi Builder :)
ctapmex, спасибо, поправил.
ОтветитьУдалитьОдна папка Build хороша для BPL-файлов, в том плане, что не придётся добавлять в PATH все папки с BPL-ками.
Для пакетов удобно использовать общие папки для BPL, Dcp, Dcu, Obj, Hpp, Res.
ОтветитьУдалитьDcu, Obj, Hpp неудобно выводить в папки Code Gear\Lib, Include, т.к. можно случайно переписать стандартные файлы. И удалять старьё тоже проще из своей папки.
Если есть большая обособленная группа пакетов - то можно для них создать отдельные папки (я сделал так для JEDI).
А для отдельных приложений и DLL лучше использовать собственные папки вывода, потому что их вывод не понадобится в других проектах.
По поводу bpl - я начинаю склоняться к тому, чтобы выводить их сразу в Common Files\Company Shared - и подключать как runtime.
Не так важно, как организована сортировка по папкам - важнее, чтобы это было однообразно во всех проектах - и для себя, и для юзера становится удобнее и приятней пользоваться.
Добрый день.
ОтветитьУдалитьНе подскажете, как сделать чтобы .dres, .rc, .res сохранялись не в папку проекта а по относительному пути res\? В Output directory for .res files указал res, но она все равно в итоге пустая
"Потом надо добавить папку для BPL-файлов в PATH. Делается это в том же Environment Variables. К переменной Path я добавил путь %WORKD2009%\Build\Bpl"
ОтветитьУдалитьвосклицательный знак забыли - ...\!Build\...
Спасибо, стало понятнее. А в Embarcadero RAD Studio XE5 нет понятия Environment -> Project:Options:Resource Compiler:Directories and Conditionals.
ОтветитьУдалить