Предкомпилированные заголовки
В моих файлах эта инициализация присутствует. Внёс ли её туда кто-нибудь намеренно, либо так было изначально, я не знаю. На другом компьютере присутствует такая же инициализация.
Всё же я хочу добится ускорения, но не вижу выхода. Как мне решить эту проблему если инициализация присутствует в единичных случаях, но во многих файлах, например:
* [COLOR=blue]Dialogs.hpp[/COLOR]: [COLOR=teal]extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);[/COLOR]
* [COLOR=blue]DB.hpp[/COLOR]: [COLOR=teal]TField* __fastcall CreateFieldComponent(Classes::TComponent* Owner, TObjectField* ParentField = (TObjectField*)(0x0), AnsiString FieldName = "");[/COLOR]
* [COLOR=blue]DBTables.hpp[/COLOR]: [COLOR=teal]void __fastcall EncodeIndexDesc(Bde::IDXDesc &IndexDesc, const AnsiString Name, const AnsiString FieldExpression, Db::TIndexOptions Options, const AnsiString DescFields = "");[/COLOR]
* [COLOR=blue]DBTables[/COLOR]: [COLOR=teal]void __fastcall AddIndex(const AnsiString Name, const AnsiString Fields, Db::TIndexOptions Options, const AnsiString DescFields = "");[/COLOR]
* [COLOR=blue]math.hpp[/COLOR]: [COLOR=teal]static const Extended NaN = 0.0 / 0.0;[/COLOR] - не правдо ли удивительно, как этот файл попадает в рассмотрение относительно предкомпиляции? Ведь в рассмотренном списке его не присутствует, не путайте с "math.h".
Остальные примеры инициализации не вижу смысла выкладывать...
Кто знает как выйти из этого положения - помогите пожалуйста. Здесь достаточно модулей чтобы компиляция продолжалась 5-10 минут, а то и больше.
Версия Borland C++ 6.0 (Build 10.166)
EhLib 3.6 Russian version.
"На h-файлы, входящие в предкомпилированный образ, накладывается ограничение - в них не должно быть инициализированных данных." ( http://www.codenet.ru/progr/bcb/Precompiled-Headers.php )
В моих файлах эта инициализация присутствует. Внёс ли её туда кто-нибудь намеренно, либо так было изначально, я не знаю. На другом компьютере присутствует такая же инициализация.
Всё же я хочу добится ускорения, но не вижу выхода. Как мне решить эту проблему если инициализация присутствует в единичных случаях, но во многих файлах, например:
* [COLOR=blue]Dialogs.hpp[/COLOR]: [COLOR=teal]extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);[/COLOR]
* [COLOR=blue]DB.hpp[/COLOR]: [COLOR=teal]TField* __fastcall CreateFieldComponent(Classes::TComponent* Owner, TObjectField* ParentField = (TObjectField*)(0x0), AnsiString FieldName = "");[/COLOR]
* [COLOR=blue]DBTables.hpp[/COLOR]: [COLOR=teal]void __fastcall EncodeIndexDesc(Bde::IDXDesc &IndexDesc, const AnsiString Name, const AnsiString FieldExpression, Db::TIndexOptions Options, const AnsiString DescFields = "");[/COLOR]
* [COLOR=blue]DBTables[/COLOR]: [COLOR=teal]void __fastcall AddIndex(const AnsiString Name, const AnsiString Fields, Db::TIndexOptions Options, const AnsiString DescFields = "");[/COLOR]
* [COLOR=blue]math.hpp[/COLOR]: [COLOR=teal]static const Extended NaN = 0.0 / 0.0;[/COLOR] - не правдо ли удивительно, как этот файл попадает в рассмотрение относительно предкомпиляции? Ведь в рассмотренном списке его не присутствует, не путайте с "math.h".
Остальные примеры инициализации не вижу смысла выкладывать...
Кто знает как выйти из этого положения - помогите пожалуйста. Здесь достаточно модулей чтобы компиляция продолжалась 5-10 минут, а то и больше.
Версия Borland C++ 6.0 (Build 10.166)
EhLib 3.6 Russian version.
Можно уточнить вопрос: действительно ли только это по вашему служит причиной длительной компиляции, и все остальные уже устранены? Я использую теже библиотеки - компиляция и линковка 14 достаточно крупных проектов у меня занимает 5 - 8 минут.
Можно уточнить вопрос: действительно ли только это по вашему служит причиной длительной компиляции, и все остальные уже устранены? Я использую теже библиотеки - компиляция и линковка 14 достаточно крупных проектов у меня занимает 5 - 8 минут.
Считаю, что только это...
Моя компиляция длится не меньше 7 минут, при любых попытках её ускорить. Я пробовал Release с отсутствием integrate debugging, также убрана оптимизация (code optimization), пробовал Make, постоянно отключено "use debug libraries", включал "don't generate state files", 480 Мб оперативной памяти: - всё это не мопогает. Единственная надежда на то о чём я писал.
Считаю, что только это...
Моя компиляция длится не меньше 7 минут, при любых попытках её ускорить. Я пробовал Release с отсутствием integrate debugging, также убрана оптимизация (code optimization), пробовал Make, постоянно отключено "use debug libraries", включал "don't generate state files", 480 Мб оперативной памяти: - всё это не мопогает. Единственная надежда на то о чём я писал.
Ты можешь попытаться убрать значения по умолчанию - правда какие глюки при том вылезут сказать сложно. Мне всеж кажется что проблема вряд ли в этом.
- но всё равно компилируется Dialogs.hpp.
"Компилируется, ну и бог с ним" - скажете вы. Но там у меня инициализация:
extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);
- и мне надо чтобы он не рассматривался, хотя бы временно. Саму же инициализацию в нём убирать я боюсь: мало ли где она учитывается.
Всё же я хочу добится ускорения, но не вижу выхода. Как мне решить эту проблему если инициализация присутствует в единичных случаях, но во многих файлах, например:
* [COLOR=blue]Dialogs.hpp[/COLOR]: [COLOR=teal]extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);[/COLOR]
По моему то о чём ты пишешь прекомпилед хидерам не помеха.
По путаешь инициализацию переменной или константы
с заданием значения аргумента функции по умолчанию
В твоём случае дело в чём-то другом.
Кстати, а что практически означает опция 'BCB 5 IDE MainMenu->Tools->Environment options->CACHE HEADERS ON STARTUP'
Опция Cache headers on startup, обеспечивает предварительную компиляцию в оперативной памяти заголовочных файлов.
По моему опыту, в борландЕ есть ошибки я даже баг лист себе веду, но в 98% случаев проблем виноват сам. Откуда вообще взялась идея проводить тонкую оптимизацию написанного борландом? Ведь в проект по умолчанию до строки #pragma hdrstop безбоязненно включены *.h со значениями параметров функций по умолчанию? Может я чего не понимаю, тогда пожалуйста просвятите.
Ещё: прибей pre-compiled headers и откомпили на одном unit'е. Посмотри размер. Теперь весь проект компили. Если размер изменился, где-то до hdrstop различия. Как минимум потому тормозить начинает. У меня как-то раз такой гемор был. Ещё автор в статье на которую ссылаешься говорит что появляются доп. файлы старше чем *.#00.
Да дословный перевод то понятен. А практически что означает? Во первых почему 'on startup'. (не 'on project load') Откуда известно какой я проект загружу и соответственно Cache headers которого надо делать?
extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);
Удивительно, но компилятор как буд-то не воспринимает то ли vcl.h, тол ли мои изменения в нём и включённом в него файле, либо что-то путаю я. Но повлиять на компиллирование, я так думаю, какого либо заголовка из vcl.h я не в состоянии. Он как буд-то компилирует стандартную схему, а к моим изменениям никак невосприимчив. Вот собственно для уяснения этого момента всё вышеозначенное и проводилось.
Размер чего смотреть, *.csm? Посмотрел - не меняется (17.3 MB).
Про последнее: какой проект будет компиллироваться неизвестно, поэтому увеличения производительности за счёт сформированного образа не будет, при смене проектов он будет формироватся каждый раз заново. Про остальное не знаю.
Эта ошибка появляется когда #include <vcl.h> не в модуле (скажем Unit1.cpp) а вынесена (например в <CommonHeader.hpp>) и (!) есть #include <math.hpp>.
С #include <math.h> всё хорошо.
<math.hpp> нужен? Если нет надо выкинуть. Или перенести #include <vcl.h> в модуль.
Хотя вопрос что это за глюк остаётся.
В BCB5 такая же хрень. Даже похуже чуть.
Там не один *.csm, а есть ещё как минимум *.#00, и возможно *.#01 и т.д. Я смотрел по общему размеру всех файлов. А автор статьи пишет что *.#01 и пр. появляются при изменениии строк до hdrstop в модулях. Это проверить надо.
Первая - IDECompilerSpeedFixV13.zip: ускоряет компиляцию и считаю добротно сработан. Даже если вас всё устраивает, попробуйте.
Вторая, на случай проблем с инкрементной компиляцией, в моём случае именно эта проблема донимала меня до недавнего времени, мне посоветовали сделать так: исключить из проекта все файлы с расширением *.pas, вместо них включить их объектные версии *.obj (но помните, что при смене версии исходного файла - *.pas, нужно перестроить проект и включить обновлённый *.obj). Могу сказать с долгожданным облегчением: "Мне помогло!". Надеюсь и вам поможет.