|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.11.2014, 22:12 | #1 |
Регистрация: 10.04.2010
Сообщений: 3
|
Ускорение компиляции
Здравствуйте, Коллеги!
Исходные данные: Очень большой проект, сотни модулей. Среда C++ Builder XE Starter. Подключено очень много дополнительных компонентов (DevExpress, TMS, DevArt, TRichView и другие). Процессор Intel Core i5 2500К. Проблема: Компиляция занимает до 8 минут !!! Из-за этого не только невозможно войти в состояние потока, а в принципе работать просто невозможно!!! Полагаю, что компилятор ведет себя некорректно каждый раз делая полную перекомпиляцию после того, как вносится изменение в любой header файл или добавляется/удаляется компонент на форме. Ведь другие модули не трогаются, а он перекомпилит весь проект. Если вносить правки в CPP-файлы, то перекомпилится только измененые модули. Возможно есть какая-та настройка в настройках компилятора, но я не знаю какая, чтобы он реже делал полную перекомпиляцию. Попытки решения: Я рассматривал общие принципы ускорения компиляции, но это все не то, нужно именно решить проблему с неправильным поведением компилятора. Я уже предвскушаю как мне постоветуют предкомпилированные заголовки и тулзу для распаралеливания компиляции, поэтому отпишусь, что у меня с этим вышло: 1. Предкомпилированные заголовки используются для vcl.h, а для сторонних компонентов их не удается использовать, т.к. ими автоматом прописываются либы в header файлах, в которых простановка #pragma hdrstop не работает (если я правильно понял, то предкомпилированные заголовки не могут прописываться в h-файлах). Если предкомпилированные заголовки и дают какую-то выгоду для vcl.h, то очень незначительную. 2. Компиляция у IDE идет только на одном ядре, поэтому существует средство распаралеливания компиляции модулей IDECompilerSpeedFix, оно уже давно устарело, не развивается и не работает под XE. 3. Разбиение программы на отдельные модули достаточно проблемная задача. Поэтому пока устроило бы решение с настройки компилятора для уменьшения числа полных перекомпиляций. Помогите, пожалуйста. Также интересно в XE2-XE7 эта проблема решена или нет. |
23.11.2014, 22:51 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Разбил бы проект на библиотеки такого бы не было.
I'm learning to live...
|
23.11.2014, 23:10 | #3 |
Регистрация: 10.04.2010
Сообщений: 3
|
Я пока не знаю как это лучше было бы сделать. Да и в любом случае это будет очень тяжело, т.к. там много что с чем связанно. Поэтому идеальным было бы самому принимать решение, когда делать полную перекомпиляцию, а когда нет. В худшем случае могут возникнуть ошибки линковки, например, когда был удален элемент на который ссылались другие модули. Более этого особых проблем не вижу. Поэтому мне кажется, что такая возможность должна быть.
|
24.11.2014, 18:31 | #4 |
Регистрация: 10.04.2010
Сообщений: 3
|
Ситуацию удалось серьезно улучшить путем изменения архитектуры проекта.
До: Проект имеет файл Global.h, в который подключены абсолютно все модули проекта. Это позволило в свое время избежать серьезной каши в виде #include-ов в каждом файле проекта. А также это дало единое пространство, где можно было обращаться к чему угодно откуда угодно. С ростом проекта это дало негативные последствия. После: Поскольку проект имеет некоторые концептуальные модули (включающие по несколько форм), то были созданы GlobalModuleName.h файлы, включающие эти формы, а подключения из Global.h были убраны. Это позволило как бы разбить общее пространство на части. В результате при правках в h файлах форм происходит перекомпиляция, только этой формы, GlobalModuleName.h и форм, в которых подключен GlobalModuleName.h (т.е. главных форм). Сейчас заголовок в cpp-шниках форм выглядят следующим образом: #include <vcl.h> #pragma hdrstop #include "Global.h" #include "FormX.h" И вот так в формах, где нужно использовать эту форму FormX: #include <vcl.h> #pragma hdrstop #include "Global.h" #include "GlobalModuleName.h" А в GlobalModuleName.h уже прописана сама форма: #include "FormX.h" и куча других форм. Как же я до этого раньше не допер Но тем не менее я счастлив |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ускорение программы С++ | rUs_LAN | Помощь студентам | 4 | 16.08.2012 13:57 |
Ускорение функций | nXs | Общие вопросы Delphi | 8 | 28.02.2012 18:52 |
Ускорение компиляции | jetyb | Помощь студентам | 4 | 13.09.2011 23:38 |
ускорение виндовс | voland123454321 | Windows | 22 | 04.09.2010 12:16 |
Ускорение д2010 | Utkin | Софт | 2 | 29.03.2010 16:03 |