Здравствуйте "Девелоперы"
Въехав в сказанное в статье 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
|