C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Почему Builder компилит все файлы проекта..., когда изменен один символ в одном модуле
Deem
Отправлено: 25.03.2004, 17:04


Мастер участка

Группа: Участник
Сообщений: 327



Меня уже давно достала эта штука, но до сих пор выкручавался...
Новый проект имеет опции (где они вобще находятся???), при которых по F9 компилятся только те файлы, в которых произошли изменения. Понятно, что если изменяешь *.h, то компилятся все файлы, в которые он included.

Работаешь себе, работаешь... и вдруг замечаешь, что начинает компилится проект целиком, как при build project. Что-то вдруг меняется (ИМНО, но файлы пока не сравнивал) в файле проекта. Причем, иногда зависит от серьезных потрясений для Builder-а (типа добавление новых компонент или наследования через repository), а иногда — без видимой причины.
Я перерыл все установки, сам bpr-файл, но не нарыл ничего.
Если проект небольшой, а создавал новый проект и набивал его модулями из старого, и все в порядке. Для большого я брал сохраненный bpr и добавлял в него недостающие модули. Но с нынешним проектом это не помагает. Беру старый проект, подстраиваю его до конца, компилю раз — нормально. Второй — нормально. Потом начинается тотальная компиляция. Проект здоровый. Долго ждать sad.gif . Причем я меняю всего одну букву и жму F9.
Помогите!!!!! Задолбало!!!

PS: а может изменяются настройки окружения билдера.
Мне это напоминает макровирус в доках, когда клавиша save в ворде работала как save as... smile.gif

Отредактировано Deem — 25/03/2004, 18:22
klen
Отправлено: 25.03.2004, 17:58


Машинист паровоза

Группа: Участник
Сообщений: 239



Наверно алгоритм у билдера военный — "Лучше перебдеть, чем недобдеть!"

У меня все как положено, компилируются только измененные файлы, хотя компоненты разные и хорошие пересобираю, ставлю и удаляю постоянно. Умемя другой глюк — когда тыкаешь в инспекторе в свойство которое содержит картинку — билдер слетает, надо все переставлять всместе с ОС.

Никто не отменял у компьтора вялотекущие болезни.
Deem
Отправлено: 25.03.2004, 18:35


Мастер участка

Группа: Участник
Сообщений: 327



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

Ну а все таки?
Asher
Отправлено: 26.03.2004, 09:13


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
А в Project->Options->Compiler->Pre-compiled headers что выбранно?
Надо вроде не None
Deem
Отправлено: 26.03.2004, 10:10


Мастер участка

Группа: Участник
Сообщений: 327



To Asher

На такой мелочи меня не поймаешь. cool.gif Там стоит как положено. И, однако, прекомпиляция заголовков влияет на скорость компиляции, а не на ее наличие или отсутствие.
Я говорю про компиляцию файлов, которые вообще не должны компилироваться. Посмотрю значение ключей компилятора. Може это поможет. sad.gif


Не нашел я, какой ключ компилятора отвечает за Project Build. Я там вообще ничего подобного не увидел. К то знает, как управлять этим параметром компиляции из командной строки?

Отредактировано Deem — 26/03/2004, 12:07
Deem
Отправлено: 29.03.2004, 13:19


Мастер участка

Группа: Участник
Сообщений: 327



Фигня с полной перекомпиляцией проекта началась у меня тогда, когда я занаследовал компонент из EHLIB, который называется EhDBGridFindDialog (надо было мне подправить его внешний вид). Сразу билдеру захотелось получить ancestor type, и пришлось добавить к проекту дельфийский модуль.
Сам он так и лежит в E:\BCB.60\EH\Units. Но у меня проект разложен по нескольким папкам (все модули с++), и ничего. А вот после добавления вышеупомянутого модуля началась тотальная перекомпиляция. Долбался я долго. Никто помочь не может. Короче, разузнал я, что такая перекомпиляция бывает, когда билдер не может найти объектные файлы, ранее созданные. Тогда беру я и сливаю в главный каталог проекта файлы библиотеки EHLIB. После этого все заработало, как надо. Компилится только файл с изменениями, дальше — линковка.
Но все файлы в одной миске — дерьмо. Выковырял я EHLIB обратно, и
пошел по всем конфигурационным местам, прописал, где можно — неможно путь в файлам либы EH. Даже в PATH для винды.... И началось все сначала.... Снова из-за смещиния кнопки на одной форме компилится весь проект целиком.
Внимание, вопрс:
Где именно надо прописать путь к файлам библиотеки ЕH, чтобы билдер находил все, что ему надо?
bmv
Отправлено: 31.03.2004, 12:52


Ученик-кочегар

Группа: Участник
Сообщений: 7



В свойствах проекта на вкладке Directories/Conditionals в Include path добавляешь путь к хидерам, в Library path — путь к либам, конкретные либы добавляешь через Add File to Project (в главном модуле, где WinMain должно при этом появиться USELIB("bla-bla.lib")). Можно еще проверить в файле проекта, опция LIBFILES — там должна появиться нужная либа. Или если добавляется объектник, то он должен быть прописан в опции OBJFILES.
Если это уже сделано или не помогает, то больше мыслей пока нет wink.gif
Deem
Отправлено: 05.04.2004, 11:49


Мастер участка

Группа: Участник
Сообщений: 327



To BMV
Это все уже давно прописано...
Вот после моего предидущего сообщения, когда я прописал что можно-нельзя где смог, появилась такая штучка: после того, как выкинешь из проекта исходный объект (на PAS) и наследованный (на C++), а потом засунешь их обратно в проект, начинает вести себя неплохо. Однако, уже в пятницу вроде заработало. В понедельник пришел — компилит весь проект. Думаю, все файлы устарели, пусть. Но это повторялось все утро, пока я снова не выполнил вышеописанную операцию. Короче, ужасы нашего городка.

Ладно, с этим хрен.
Есть еще одна хитрая штучка. Если я наследую класс с формой, и моя форма создается автоматически, то добавление lib или obj с родительским классом не проходит: вопит билдер в

Application->CreateForm(__classid(TSuperEhFindDlg), &SuperEhFindDlg);

, что тип (мой) неизвестен. Замолкает после добавления к проекту именно PAS-файла. Но это же фигня! Я, правда, не пробовал свою форму динамически создавать, но думаю будет то же. С DFM проблемы, что ли?

Отредактировано Deem — 05/04/2004, 12:52
avb
Отправлено: 23.09.2005, 13:13


Не зарегистрирован







To Deem
Заметил, что такое случается, если поменять системную дату на компе. Например, вчера работал и было все Ок, сегодня установил ситемную дату на позовчера — запускаю Builder и работаю со вчерашним проектом — теперь компилит все модули подряд!
olegenty
Отправлено: 23.09.2005, 13:23


Ветеран

Группа: Модератор
Сообщений: 2412



2 avb — это очевидно.

2 deem — я ничего лучшего не придумал, как окончательно перейти на запускающий exe и plugin'ы. помимо упрощения сопровождения, уменьшилось и время компиляции каждой dll (естественно).
avc*
Отправлено: 23.09.2005, 13:55


Не зарегистрирован







QUOTE

я ничего лучшего не придумал, как окончательно перейти на запускающий exe и plugin'ы

Аналогично. Полная перекомпиляция всего проекта только в крайнем случае.
Dimon.Ru
Отправлено: 23.09.2005, 15:02


Станционный диспетчер

Группа: Участник
Сообщений: 92



а я делаю так:
нажимаю ALT+F9 -> происходит компиляция текущего модуля
потом нажимаю F9 -> идет линковка всех скомпиленных модулей.

вроде так происходит быстрее.
dvv
Отправлено: 24.09.2005, 21:09


Дежурный стрелочник

Группа: Участник
Сообщений: 43



Сейчас такая проблема у меня существует, но не сильно достает.

Такое меня сильно доставало, когда я работал еще на Borland C++.
Причину сейчас уже не вспомню, но что то связанное с временем создания файлов.

При компиляции в некотроых обстоятельствах (не помню каких) образовывался файл с "не той" датой.

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

Лечилось все очень просто: нужно удалить все файлы, которые получаются при компиляции, затем заново собрать проект.

Вернуться в Вопросы программирования в C++Builder