Programming - cpueblo.com

PreCompile (프리컴파일) 로 컴파일 및 빌드 빠르게 하기


글쓴이 : 유광희 날짜 : 2004-04-21 (수) 14:59 조회 : 17031
안녕하세요

유광희 입니다. 빌더에서 제공하는 프리컴파일 기능을
제대로 쓰는 방법을 알려드립니다

대형 프로젝트를 제작할때 컴파일 시간이 꽤 걸리는데, 나름대로 #pragma hdrstop 을
쓴다고 썼지만, 한 소스 파일을 컴파일 및 빌드를 할때 이상하게 라인수가 10만이 넘어가고 그렇죠?
매번 파일마다 이런 현상이 생기니, 속도도 느리고, 여러 글을 보면 10분이 걸렸네 뭐 이렇습니다..
물론 하드웨어 사양도 있겠지만, 우선 하드웨어 사양을 따지기 전에 아래처럼 프리컴파일을
제대로 처리한 후에 사양을 따지도록 하죠..
믿거나 말거나 아래 처럼 해보세요. 확실히 달리진걸 느끼시게 됩니다. 특히 대형 프로젝트 ^^

프리컴파일을 쓰는 방법입니다.

1. 우선 프로젝트에 Preheader.cpp, Preheader.h 를 생성합니다. File->New->Unit 에서 우선 생성후 나중에 저 이름으로 저장

PreHeader.cpp
=============================================================================

//---------------------------------------------------------------------------
#include "PreHeader.h"
//---------------------------------------------------------------------------

PreHeader.h
=============================================================================

#ifndef PreHeaderH
#define PreHeaderH

#include <time.h>
#include <assert.h>
#include <vcl.h>
#include <inifiles.hpp>
#include <dir.h>
#include <stdio.h>
#include <string.h>
#include <systdate.h>
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include <jpeg.hpp>
#include <ComCtrls.hpp>
#include <ImgList.hpp>
#include <Registry.hpp>
#include <ActnList.hpp>
#include <scktcomp.hpp>
#include <Dialogs.hpp>
#include <NMHttp.hpp>
#include <NMURL.hpp>
#include <Psock.hpp>

#include <memory>

#include "define.h"
#include "Common.h"

#pragma hdrstop

//---------------------------------------------------------------------------
#endif


설명 : 위의 include 선언은 예시 입니다. PreHeader.h 에 폼이던 뭐든 한번 이상 중복되게 선언, 또는 쓰일것 같은, 변화되지 않는 해더 파일을 모조리 다 PreHeader.h 에 포함합니다

2. 각각의 프로젝트의 모든 폼, 유닛(.cpp) 의 첫 라인을 처리합니다.

기존:
#include <vcl.h>
#include <inifiles.hpp>
#pragma hdrstop
#include "TfrmMain.h"
#include "abcd.h"

이렇게:
#include "PreHeader.h"
#include 'TfrmMain.h"
#include "abcd.h"

3. PreHeader 유닛 파일(PreHeader.cpp) 을 프로젝트 메니저의 맨 위로 옮겨줍니다

4. CTRL+SHIFT+F11 -> Compiler -> Precompile headers 에서
4-1 FileName 을 $(BCB)\\lib\\XXXXX.csm 처럼 바꿉니다. XXXXX 는 프로젝트 이름입니다
4-2 Use pre-compiled headers 를 선택

5. 컴파일 또는 빌드
컴파일시 PreHeader.cpp 의 경우 10만 라인까지 넘어가 느려지나, 이 파일을 넘기면,
그 이외 파일들은 1~3초만에 모두 다 컴파일이 됩니다. 간혹 만라인이 넘는다.. 그럴경우에는 그 cpp 중간에 include 가 들어가 있을 수 있어서 그럴수 있습니다. 그런것도 vcl 쪽 헤더라면 preheader.h 로 빼주세요.

달리진걸 느끼셨나요? 이전에는 #pragma hdrstop 으로 했는데두 몇만라인 까지 갔던게, 이제 모두 싹 사라졌죠? 10분 걸렸다면 2~3분만에 올 빌드가 끝날 겁니다.

혹시 의문점이 있지 않나요? 폼에 보면 헤더 파일에 폼에서 썼던 파일들이 자동으로 include 선언되어 있죠?
이런것도 말끔히 위 preheader.h 에 넣음으로서 이젠 무쟈게 빨라집니다. 아니 아예 헤더를 읽지 않았나? 라는 생각이 들 정도예요

다음 번에는 속도 향상을 위해서 class 로 된 녀석을 include 하여 선언할때 속도를 줄일 수 있는
방법을 적어볼께요

그럼 이만

http://www.cpueblo.com







손님 2004-04-25 (일) 14:30
  헤더이름을 preheader.h 로 하지 않으면 안돼나요?
댓글주소
유광희 2004-04-26 (월) 15:20
  이름이 바뀌어도 상관없습니다~
댓글주소
왕감사 2004-07-30 (금) 10:57
  감사함다....꼭 필요한 내용이었는데.. ^0^ 복받으세용.
댓글주소