Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Как избавиться от DCU в Delphi?

Автор: SolidSnakeRU
Дата сообщения: 15.12.2011 15:14
Добрый день!

Вопрос по Delphi Xe и выше:
После обновления INDY, после компиляции проекта, в выходном каталоге появляется куча DCU файлов от инди.
Что делал: Есть общий каталог для DCU файлов инди, туда сложил появившиеся DCU
файлы. Настроил в IDE путь поиска DCU файлов (tools - options - library - debug dcu path).
Но файлы все равно создаются .

Как бы сделать так, чтобы делфи использовал для INDY нормальные DCU файлы?
Автор: wasilissk
Дата сообщения: 15.12.2011 18:30
Project -> Options -> Directories -> UnitOutputDirectory
Автор: SolidSnakeRU
Дата сообщения: 16.12.2011 07:55
Дело не в свойствах проекта:
Создал проект в XE, положил idtcpserver, скомпилировал - получил 1 ехе и 1 dcu (именно это и нужно).

Открыл этот же проект в Delphi XE2 (с обновленным INDY), скомпилировал и появилось куча dcu от INDY.

Вот сравнение.

Думаю, надо настроить какой то путь в настройках IDE или как-то по особенному установить обновленный INDY...
Автор: wasilissk
Дата сообщения: 16.12.2011 10:06
SolidSnakeRU
Тогда очистите это поле.
Если что-то указано в UnitOutputDirectory, все dcu-хи будут сваливаться в эту директорию. Если нет, будут валиться в директории с pas-файлами.
Автор: SolidSnakeRU
Дата сообщения: 16.12.2011 11:33
Вопрос не совсем в этом, скорее - почему они стали создаваться сразу после обновления INDY?
По идее, потому что я перекомпилировал INDY и старые DCU стали не подходить.
Ок, я указал в IDE путь поиска tools - options - library - debug dcu path.
Казалось бы - каталог с DCU файлами INDY указан и они как раз те, что создались при перекомпиляции.
Автор: wasilissk
Дата сообщения: 16.12.2011 11:47
SolidSnakeRU
debug dcu path тут совершенно не при чем. Debug dcu используется как первоисточники только в том случае, когда pas-ки недоступны. Когда они доступны, dcu-файлы (неважно с debug info или без) будут заново компилироваться при каждой пересборке.
Возможно изначально у вас просто не было pas файлов, а теперь появились.
Автор: SolidSnakeRU
Дата сообщения: 16.12.2011 13:01
В том то и дело, что были. Но в другом месте.
По умолчанию, исходники INDY лежат в "Embarcadero\RAD Studio\х.0\source\Indy10", после обновления INDY, каталог с исходниками изменился, но он есть и там лежат и pas и dcu файлы.
Автор: delover
Дата сообщения: 16.12.2011 15:41
wasilissk
Опять вы мутите воду. Каталоги dcu-debug и просто dcu должны быть в разных местах как у среды Delphi после установки.

SolidSnakeRU
У Вас некоторая неразбериха-или недопонимание с каталогами. Есть кнопка Clean - удаляет автоматически создаваемые файлы dcu это они. Когда pas Indy и dcu лежат в одной папке, то по технологии это плохо. Надо УДАЛИТЬ все dcu и понять почему они создаются после компиляции. После того как Вы просвежите вопрос об общих настройках Delphi лайбрари для всех проектов и после этого настройках локального проекта можно будет сказать что Вы спец. Я просто удаляю все dcu которые вижу и если это не каталог Delphi\Lib начинаю беспокоится...
Автор: SolidSnakeRU
Дата сообщения: 16.12.2011 16:32

Цитата:
У Вас некоторая неразбериха-или недопонимание с каталогами.

Иначе я бы не создал тему. Работаю в делфи не первый день, обычно не сталкивался с этой особенностью. Создавались только нужные DCU файлы, именно по тем pas что используются непосредственно в проекте - это меня совершенно устраивает.


Цитата:
УДАЛИТЬ все dcu и понять почему они создаются после компиляции.

Если речь идет о примере - где я создал форму с idtcpserver - как раз пытаюсь понять почему они создаются.
Если же речь о dcu файлах, которые создаются при компиляции самого INDY во время установки (bpl) - чего тут странного? Они и должны создаваться.

Если есть время и уверенность в том, что этот вопрос имеет четкий ответ - попробуйте удалить INDY из поставки делфи (сперва из IDE, затем все файлы id* относящиеся к indy из каталога Delphi).
И установите новую сборку INDY - уверен, и у вас начнут создаваться dcu файлы от INDY при компиляции любого проекта, где есть хоть 1 компонент INDY.
В принципе, я могу и с этой кучей мусора жить. Или сделать скрипт чтоб они удалялись или общие настройки проекта, чтобы они копились в другом каталоге.
Но вопрос при этом останется - какого черта они создаются в описанной мною ситуации)
Автор: wasilissk
Дата сообщения: 16.12.2011 16:47
delover

Цитата:
Опять вы мутите воду. Каталоги dcu-debug и просто dcu должны быть в разных местах как у среды Delphi после установки.

А вы опять чего-то недопоняли и поспешили с выводами.
SolidSnakeRU

Цитата:
Если есть время и уверенность в том

Я как раз ради интереса проверил. Стоит "родной" инди на 2007 и установленный на 2009. Создание/несоздание dcu-х в текущей папке проекта зависит только от указанной директории UnitOutputDirectory. Собственно как и должно быть. ЧЯДНТ?
Автор: delover
Дата сообщения: 16.12.2011 16:48
SolidSnakeRU

Цитата:
И установите новую сборку INDY - уверен, и у вас начнут создаваться dcu файлы от INDY при компиляции любого проекта, где есть хоть 1 компонент INDY.

Нет не создаются.
У меня незыблимый порядок.


Цитата:
Если же речь о dcu файлах, которые создаются при компиляции самого INDY во время установки (bpl) - чего тут странного? Они и должны создаваться.

Тут не сказано куда они создаются. Они опять же плюхаются рядом и Delphi в понимании этого добавляет в пути к DCu файлам пути pas файлов. Прописываются они в опциях Delphi общих. Unit path. Если там пути которые ведут к pas файлам - заранее это кривизна и гемор 100%.


Цитата:
Если речь идет о примере - где я создал форму с idtcpserver - как раз пытаюсь понять почему они создаются.

Пути к pas файлам созданы из за недоправильной установки indy. Если в проекте указано dcu кидать сюда, то те pas файлы которые в общих настройках запачены, с них будет слеплены новые dcu которые лягут туга куда Вы попросили.

рецепт:
Зайдите в опции Delphi в опции компилятора-директории и просто всем путям добавьте символ минус. Чтобы ни один каталог Delphi изначально не знала. Потом в опциях проекта опции компилятора-директории вообще все удалите из обеих сборок Base\Debug\Release. После этого удаляйте все dcu которые можно получить снова кроме родных Delphi. Это немного долго, но после этого наступает желаемый порядок. Добавляете в пути Unit lib только те которые не содержат pas файлов и будет счастье 100%. Если все известные каталоги не содержат pas файлов то получение dcu файлов будет только единожды и под контрольно - аксиома.
Автор: akaGM
Дата сообщения: 18.12.2011 13:55
у меня была похожая ситуация, только думаю, что случай был уникальным:

все pas файлы имели дату какую-то запредельную 2020 и при каждом обращении, естественно, пересоздавались dcu'шки...
Автор: SolidSnakeRU
Дата сообщения: 19.12.2011 09:34
delover, спасибо, ваше сообщение помогло сделать именно то, что я хотел.

Делаю вывод, уверен, теперь это поможет многим. На примере установки INDY:
Удаляем старый релиз INDY из Delphi. Как это делать можно найти в интернете.
Создаем отдельный каталог для INDY, скачиваем нужную сборку INDY, кладем папки "Core", "Protocols", "System", в нашу папку.
Создаем еще папки "dcu\debug" и "dcu\release", внутри нашей.
Заходим в Delphi, в настройках среды, добавляем наши каталоги в пути.
Каталог "dcu\release" добавляем в "Library path".
Каталог "dcu\debug" добавляем в "Debug dcu path".
В Delphi, открываем все нужные *.dpk от INDY, в нужном порядке.
В свойствах каждого проекта (проект создается при открытии dpk), настраиваем путь "Unit output directory", причем для release сборки указываем каталог "dcu\release", для debug соответственно "dcu\debug".
"Билдим" наши проекты в release и debug конфигурациях - этим самым получаем нужные dcu файлы.
Устанавливаем INDY (на 2х пакетах с шестеренкой надо нажать install).
Если есть, удаляем DCU файлы из каталогов "Core", "Protocols", "System".

Для других проектов, этого я делать не стал:

Цитата:
Потом в опциях проекта опции компилятора-директории вообще все удалите из обеих сборок Base\Debug\Release

dcu файлы от моих модулей пусть кладутся рядом)
Автор: Dmitry
Дата сообщения: 05.09.2013 23:23
delover

Цитата:
рецепт:
Зайдите в опции Delphi в опции компилятора-директории и просто всем путям добавьте символ минус. Чтобы ни один каталог Delphi изначально не знала. Потом в опциях проекта опции компилятора-директории вообще все удалите из обеих сборок Base\Debug\Release. После этого удаляйте все dcu которые можно получить снова кроме родных Delphi. Это немного долго, но после этого наступает желаемый порядок. Добавляете в пути Unit lib только те которые не содержат pas файлов и будет счастье 100%. Если все известные каталоги не содержат pas файлов то получение dcu файлов будет только единожды и под контрольно - аксиома.


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

Страницы: 1

Предыдущая тема: видеоплеер в delphi -7


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.