GCC Precompiled header 사용방법아시나요?

pynoos의 이미지

http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html#Precompiled%20Headers

여길보면 지원하는 것 같은데..
어떻게 사용하는지가 안나와 있군요.

http://www.livejournal.com/users/gaal/99148.html

여길보면 구현되어 들어가 있다는 말과 사용이 쉽다는 것 같은데...

누구 아시는 분 있나요?

pynoos의 이미지

앗..
제가 현재 개발중인 버전의 문서를 보고 흥분(?)한것이었군요... 저런...

아뭏든 GCC 에서도 precompiled header가 빨리 안정적으로 사용되었으면 좋겠습니다.

zelon의 이미지

thread 위로 올리려고 답변 답니다. ^^;;; gcc 의 pch 어떻게 사용하나용? ^^

-----------------------------------------------------------------------
GPL 오픈소스 윈도우용 이미지 뷰어 ZViewer - http://zviewer.wimy.com
블로그 : http://blog.wimy.com

zelon의 이미지

으음.. 영 모르겠던 걸 어찌어찌 검색해서 해보니까 다음과 같다는 결론이 나는데 맞는지 판단해주세요. 컴파일 속도는 빠르던데 ㅋㅋ

제가 원래 윈도우 프로그래밍을 많이 해서 그 스타일대로(파일명등~) 일단 해봤습니다.

-. 먼저 원하는 헤더 파일들을 모아서 stdafx.h 라는 파일을 하나 만든다.
-. 이 파일 안에 주로 쓰지만 변경하지않는(vector, list, iostream 등) 헤더 파일들을 넣는다.
-. 이 stdafx.h 헤더 파일을 컴파일 시켜놓는다.

아래는 cpp 의 경우,

g++ -x c++-header stdafx.h -o stdafx.h.gch

아래는 c 의 경우,

gcc -x c-header stdafx.h -o stdafx.h.gch

-. 위와 같이 컴파일을 하면 꽤 큰 용량의 stdafx.h.gch 파일이 생긴다. 이 파일이 precompiled header 이다.

-. precompiled header 를 쓰기 위해서는 원하는 곳에 #include "stdafx.h" 를 추가하는 것으로 끝난다. 즉 stdafx.h 파일이 있는 곳에 stdafx.h.gch 가 있으면 gch 를 먼저 본다는 것이다(제가 영어 해석하기에 그랬습니다 :D)
-. gch 를 이용하면 컴파일이 무척 빠르다.

----

아래는 제가 테스트 해본 방법입니다.

"stdafx.h" 파일

#include <iostream>
#include <vector>

"usePCH.cpp" 파일

#include "stdafx.h"

using namespace std;

int main()
{
  vector < int > v;
  v.push_back(1);

  cout << "ok" << endl;
}

"notPCH.cpp" 파일

#include <iostream>
#include <vector>
using namespace std;

int main()
{
  vector < int > v;
  v.push_back(1);

  cout << "ok" << endl;
}

먼저 stdafx.h 파일을 -x 옵션을 이용해서 stdafx.h.gch 파일을 만들어 낸 후, usePCH.cpp 파일과 notPCH.cpp 파일을 둘다 g++ [filename] 으로 컴파일해보았습니다.

정확한 시간을 잴 필요도 없이 체감속도가 달랐습니다. usePCH.cpp 가 훨씬 빠르더군요. 여러분들도 해보시구요 ^^;;; 이상하거나 제가 잘못 알고 있는게 있다면 리플 팍팍 달아주세요^^/

-----------------------------------------------------------------------
GPL 오픈소스 윈도우용 이미지 뷰어 ZViewer - http://zviewer.wimy.com
블로그 : http://blog.wimy.com

pynoos의 이미지

저도 당시에는 실행도 안해봤었는데.. 테스트좀 해봐야겠군요.. ^^ 감사합니다.

ikpil의 이미지

이것을
g++ stdafx.h <-- 엔터

이렇게 하면 stdafx.h.gch 가 자동으로 만들어 집니다.
g++ 4.1.2-42 입니다.

속도가 빨라 질줄 알고 모든 헤더파일에 대하여 gch를 만들고, 테스트 해보았습니다만, .. 속도가 빨라지지 않습니다.

정상적으로 gch 파일들은 다 만들어졌으며, h 파일이 있는 곳에 gch가 놓여져 있습니다.

무슨 문제일까요?

oosap의 이미지

제가 g++ 로 테스트 했을 때는 너무 간단한 파일이라 크지 않지만 시간 차가 분명 있는 걸 보았습니다.

윈도에서 PCH 에 대해서는 원리를 잘 이해 못했었는데,
이 쓰레드를 보고 직접 해보니 잘 알 수 있었습니다.

-. precompiled header 를 쓰기 위해서는 원하는 곳에 #include "stdafx.h" 를
 추가하는 것으로 끝난다. 즉 stdafx.h 파일이 있는 곳에 stdafx.h.gch 가 있으면 gch 를
 먼저 본다는 것이다. (제가 영어 해석하기에 그랬습니다 :D)

이 부분 정말 그렇더군요..

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.