C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[792] PreHeader 프리헤더 컴파일 효율적으로 하는 방법.
김태선 [jsdkts] 7216 읽음    2008-08-01 16:44
이 팁은 쓰기가 조금 조심스럽군요.
여러 경우에 대한 다양한 테스트를 다 한게 아니고,  프로그램 만들면서 쌓인 경험적인 결과이기 때문입니다.

아무튼, 그렇다고 큰 일 생기는 것도 아니고 도움이 될만한 분들도 많다고 보고 마구 씁니다.

PreHeader 프리헤더컴파일 문제는 빌더 개발자를 여러번 괴롭히는 문제입니다.
어떻게 하는 것이 가장 효과적일까요?

빌더나 VC에 프리헤더 컴파일이 등장한 이유가,  C++의 언어 구조상 빠른 컴파일이 매우 힘든데,
실지적으로 컴파일러가 컴파일해야하는 소스의 대부분이 항상 고정되어 있는 내용들이라는데
착안하여, 빌더와 VC 개발자들이 고정적인 부분은 한번만 컴파일 해 놓으면 다음 번에 다시 컴파일 할 필요가
없도록 한 것이죠.
지금은 CPU와 메모리 성능이 매우 좋아져 프리헤더 컴파일이 제대로 받쳐주면 C++도 컴파일하느라 시간 소비를 하지 않아도 되게 되었습니다.

이미 프리헤더컴파일 문제는 여러번 볼프에서 다뤄져 온 내용이며, 그에 따라 많은 분들이 응용해서 사용하고 있습니다.
하지만 여러번 문제가 발생하기도 하고, 웬지 기대한성능이 안나오기도 합니다.
도대체 어떻게 하는게 제일 좋은거야? 하는 생각이 들기 마련이죠.

필자가 지금까지 경험해본 바에 의한 최고의 프리헤더 컴파일 방법은

#include <vcl.h>
#pragma hdrstop

이겁니다. 최초 주어진 프리헤더 컴파일 방법을 그대로 유지하는 것입니다.
그리고 소스의 어디에서도 통일적으로 위와 같이 유지하는 것입니다. 이 점이 아주 중요합니다.
절대 소스 어디에서도 다른 형태로 변형하면 안됩니다. 가령 다른 소스에서는

#include <vcl.h>
#include <stdio.h>
#pragma hdrstop

식으로 하면 안됩니다. 이렇게 하면 프리헤더컴파일한 결과가 커지고 나중에 컴파일러가 프리헤더컴파일 관련 에러를 토해 냅니다.  "internal error..." 이런 치명적인 에러를 만나는 일이 빈번해 질 수 있습니다.

그래서 컴파일러가 준비해 준 다른 include는

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <IniFiles.h>
#include <Registry.h>

등으로 #pragma hdrstop 밑에 배열하는게 좋습니다.

이렇게 하면 프리헤더 컴파일관련 에러를 만날 일이 확 줄어듭니다.
필자의 경우는 이렇게 표준?을 유지한 이후로는 에러를 만난 일은 거의 없습니다.
그렇다고 컴파일 시간이 크게 오래 걸리는 것도 아닙니다.

아주 큰 프로젝트인 경우 또 include 가 대단히 많은 경우는
여기 볼포에 있는 PreHeader 컴파일 관련 내용을 참고해서 만들어 보는 게 나을 수도 있습니다.
어차피 프리헤더컴파일 관련 에러는 다시 빌더 시작하고 프리헤더 컴파일 결과물을 특정 폴더에
따로 생성되게 하면 줄일 수도 있을테닌까요.
이 경우도 가장 중요한 원칙은 #pragma hdrstop 위의 내용은 모든 소스에서 동일해야 한다는 것입니다.

다만 이 룰을 지켰는데도 빌더6에서 가끔 프리헤더컴파일 관련 에러를 토해 내기도 해서
한참동안 이렇게 쓰다가 어느 순간 그냥 표준?적인 방법으로 선회를 한 것입니다.
하지만 컴파일 시간이 많이 걸린다면 하는 수 없이 #pragma hdrstop 위에 고정적인 내용을 모두 통일적으로 묶어 올리는 방법을 써야 하겠죠.

이 내용은 빌더6 기준입니다. 다른 버전은 뭐라고 하기 어렵군요.

+ -

관련 글 리스트
792 PreHeader 프리헤더 컴파일 효율적으로 하는 방법. 김태선 7216 2008/08/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.