C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ускорение компиляции (8 минут!!! спасите!!!)  (Прочитано 1535 раз)
execoma
новенький


Сказали спасибо: +1/-0
Offline

Сообщений: 2


Ускорение компиляции (8 минут!!! спасите!!!)
« : 23 Ноябрь 2014, 22:16:37 »

Здравствуйте, Коллеги!

Исходные данные:
Очень большой проект, сотни модулей. Среда 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 Ноябрь 2014, 22:23:47 от execoma » Записан
execoma
новенький


Сказали спасибо: +1/-0
Offline

Сообщений: 2


Re: Ускорение компиляции (8 минут!!! спасите!!!)
« Ответ #1 : 24 Ноябрь 2014, 18:33:10 »

Ситуацию удалось серьезно улучшить путем изменения архитектуры проекта.

До:
Проект имеет файл Global.h, в который подключены абсолютно все модули проекта. Это позволило в свое время избежать серьезной каши в виде #include-ов в каждом файле проекта. А также это дало единое пространство, где можно было обращаться к чему угодно откуда угодно. С ростом проекта это дало негативные последствия.

После:
Поскольку проект имеет некоторые концептуальные модули (включающие по несколько форм), то были созданы GlobalModuleName.h файлы, включающие эти формы, а подключения из Global.h были убраны. Это позволило как бы разбить общее пространство на части.

В результате при правках в h файлах форм происходит перекомпиляция, только этой формы, GlobalModuleName.h и форм, в которых подключен GlobalModuleName.h (т.е. главных форм).

Сейчас заголовок в cpp-шниках форм выглядят следующим образом:

#include
#pragma hdrstop
#include "Global.h"
#include "FormX.h"

И вот так в формах, где нужно использовать эту форму FormX:

#include
#pragma hdrstop
#include "Global.h"
#include "GlobalModuleName.h"

А в GlobalModuleName.h уже прописана сама форма:
#include "FormX.h"
и куча других форм.

Как же я до этого раньше не допер  Но тем не менее я счастлив 
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


« Ответ #2 : 25 Ноябрь 2014, 21:03:39 »

Старайтесь без необходимости не включать VCL-заголовки (в том числе формы) в заголовочные файлы (*.h) - лучше включать их в исходники (*.cpp) дабы избежать разбухания программы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.373 секунд. Запросов: 19.