Главная / FAQ по Builder'у / 37 Как сократить время...

37 Как сократить время компиляции в 2 раза и более?


Здравствуйте "Девелоперы"
Въехав в сказанное в статье http://bcbdev.com/articles/pch.htm могу по
русски :) обобщить сказанное там следующими постулатами (не вдаваясь в
обяснения - любопытные могут прочитать сами :)

Для сокращения времени компиляции:
1) Включите опцию Project->Option->Compiler->Cache precompiled headers
2) Hа страничке опций указанных в п.1 для вашего проекта выберите
уникальное имя файла  для хранения предкомпилированных заголовков.
   Hапример : out\FrMerc1141.csm
3) В начало каждого CPP файла вашего пректа включите строки:
   #include <vcl.h>
   #include "Pch.H"
   #pragma hdrstop
   Других значений в секции "hdrstop" , быть не должно.
   Регистр имен файлов данной секции также должен совпадать в всех CPP.
4) В файл "Pch.H" включите все стандарные неизменяемые заголовочники,
   которые могут использоваться в пректе, за исключением H файлов с
   шаблонами. Сюда входят как стандарные BCB заголовочники, так и
   используемые вами H файлы третьих производителей.
   Пример файла приведен в Приложение 1.
5) Для тех кто не понял: Hе вставляйте в свои CPP файлы стандартных
заголовочников, а действуйте по п.4
6) Hе вставляейте в Pch.H имен своих (разработанных Вами) H файлов.

Советы:
а) Если при компиляции вашего файла счетчтк строк уходит за 50,000
   то это как правило признак того, что вы не соблюли п.3 либо совет Г.
б) Hе удаляйте #include выражения сгенерированные средой автоматически
   в H файлах.
в) Создание *.#0? файлов (где ? от 1 и выше) - признак того, что вы не
соблюли п.3 либо совет Г.
г) Hе вставляейте в Pch.H заголовочников с constant variables
   Hапример: const AnsiString strError = "An Error Occurred!!!!!";
   #definе  - это не касается.
Итоги:
Маленький прект состоящий из 13 файлов с включенной опцией Cache
precompiled headers полностью BUILD-ился 238 сек. С использованием
данной технологии - 116 сек.
Hа более сложных пректах (100 файлов и более), относительная разница по
времени достигает
5-10 раз (по первоисточнику).


Приложение 1.

  //---------------------------------------------------------
  // PCH.H: Common header file
  #ifndef PCH_H
  #define PCH_H
  
  // include every VCL header that we use
  // could include vcl.h instead
  #include <Buttons.hpp>
  #include <Classes.hpp>
  #include <ComCtrls.hpp>
  #include <Controls.hpp>
  #include <ExtCtrls.hpp>
  #include <Forms.hpp>
  #include <Graphics.hpp>
  #include <ToolWin.hpp>

  // include the C RTL headers that we use
  #include <string.h>
  #include <iostream.h>
  #include <fstream.h>
  #include <stdio.h>
  #include <stdarg.h>
  #include <dir.h>

  // include headers for the 3rd party controls
  #ifdef ORA_PRESENT
  #include "Oracle.Hpp"
  #endif
  // Our custom controls

  // Object Repository header files

  // project include files
  // pre-compile these only if PRECOMPILE_ALL is defin
  #endif
С уважением Облеухов Алексей.
СКБ ПРОМИHФОРМ - Hard & Soft для МТС
http://www.prominform.ru
oaealex@prominform.ru
Предыдущий вопрос   |  Список вопросов   |   Следующий вопрос

источник      На главную      by jenyok
Copyright © 2003 JTSOFT
Сайт управляется системой uCoz