ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • StdAfx (미리컴파일된 헤더) 수동 생성!
    랭귀지/API 2010. 7. 16. 11:17

    Dark GDK에서 제공하는 Application Wizard를 사용하여 프로젝트를 만들게 되면,

    일단 뚝딱 기본 틀이 만들어지니 편하긴 한데, 뭔가 이상하고, 빠진게 많습니다.

    프레임웍 제작과 관련한 강좌에 들어가기전에, 미리 컴파일된 헤더는 우리에게 꼭 필요한 존재인데,

    App. Wizard에서 자동 생성을 안해주는군요.


    미리 컴파일된 헤더라는게 무엇인지 모르시는 분이 계실까 노파심에 간단히 설명드리지면,

    우리가 흔히 Win32 어플리케이션을 App. Wizard를 통하여 생성하게 되면 stdafx.h/cpp 이라는 파일이

    프로젝트에 기본으로 딸려오는 것을 볼 수 있죠.


    미리 컴파일된 헤더 기능(PreCompiled Header:PCH)은 자주 변경되지 않는 긴 소스 파일을 미리

    컴파일하여 해당 컴파일 결과를 별도의 파일에 저장을 해놓고, 컴파일할 때 해당 파일들을 새로

    컴파일 하지 않고, 미리 컴파일된 파일을 사용함으로써 컴파일 속도를 향상시키는 기법입니다.


    한예로, Win32 API 프로그래밍시 windows.h 같은 큰 헤더 파일을 매번 다시 컴파일하자면 컴파일

    속도가 엄청나게 느리기 때문에 처음 컴파일 할때 한번만 미리 컴파일을 해두고, 계속 재활용 하는것이죠.


    stdafx.h/cpp 라는 파일명은 VC++에서 기본적으로 사용하는 PCH 파일의 이름일뿐이고,

    반드시 저 파일명으로 해야 하는 것은 아닙니다. 그러나, 로마에 왔으면 로마법을 따르랬다고...

    VC++로 컴파일을 한다면, 가급적이면 일반적인 관례를 따라 주는 것이 불필요한 혼란을 피할수있겠죠?


    자, 거두절미하고, 수동으로 이 PCH 파일을 프로젝트에 추가시키는 방법을 알아보도록 하겠습니다.


    먼저, Dark GDK의 App. Wizard를 이용하여 아무런 테스트용 프로젝트를 만듭니다.

    그런데 여기서 첫번째 거슬리는 문제점을 발견했습니다.

    프로젝트에 Source Files 이라는 필터는 있는데 Header Files 라는 필터가 없네요.

    왼쪽 솔루션 탐색기의 프로젝트 이름 위에서 마우스 오른쪽 버튼 -> 추가(D) -> 새필터(F)으로

    새 필터를 추가하시고, 이름을 Header Files로 바꿔줍니다.

    사용자 삽입 이미지

    추가 하셨다면, 이번에는 Header Files 필터 위에서 마우스 오른쪽 버튼 -> 속성(R)을 클릭하시고,

    속성 창에서 필터 항목을 찾아 h; 라고 적어 줍니다.

    확장자가 h인 모든 파일을 이 필터에 담겠다는 의미입니다.

    사용자 삽입 이미지
    (클릭하시면, 확대되어진 이미지가 나옵니다. 잘 안보이시면 클릭해서 보세요.)

    위 이미지 처럼, 반드시 왼쪽 상단 구성 목록에서 모든 구성을 선택하신 후, 설정을 변경을 하셔야 합니다.

    미리 컴파일된 헤더 만들기/사용 부분을 "미리 컴파일된 헤더 사용(/Yu)" 으로 변경해줍니다.


    이제 다시 솔루션 탐색기로 가서, 프로젝트 이름 위에서 마우스 오른쪽 버튼 -> 추가(D) -> 새항목(W)

    프로젝트에 각각 stdafx.h 파일과 stdafx.cpp 파일을 추가합니다.

    사용자 삽입 이미지

    여기까지 잘 따라오셨나요?

    대부분의 분들이 여기까지만 하시고서 안된다고 포기하시는 분들이 많습니다.

    가장 중요한 마지막 부분을 더 해주셔야 PCH 수동 세팅이 완료 됩니다.


    사용자 삽입 이미지

    위 이미지 처럼 PCH 파일인 stdafx.cpp 파일에서 마우스 오른쪽 버튼 -> 속성(R)을 클릭하시고,

    사용자 삽입 이미지

    아까 프로젝트 속성에서 미리 컴파일된 헤더를 설정해준 것과 비슷합니다.

    구성 리스트에서 모든 구성을 선택하시고, 다만 이번에는 미리 컴파일된 헤더 만들기/사용 속성에서

    "미리 컴파일된 헤더 만들기(/Yc)"을 선택합니다.

    헤더파일들은 프로젝트의 속성을 그대로 이어 받아 따라가기때문에, 프로젝트에서 stdafx.h 파일을

    PCH 파일로 선정하는 것만으로도 충분하지만, cpp 파일은 프로젝트의 속성을 모두 이어받는 것이

    아니기 때문에, cpp 파일을 PCH 파일로 지정하기 위해서는 사용하는 것이 아니라 만들어주어야합니다.


    여기까지 하셨다면, 수동세팅은 끝~~ 짜잔~ 그런데 지금 컴파일 하면 어떻게 될까요?

    Bingo! 당연히 에러가 쫘르륵 나겠죠. PCH 관련 설정은 모두 끝마쳤으나,

    프로젝트에서 이제는 의무적으로 PCH 헤더를 포함시켜줘야합니다.


    1. 가장 먼저 stdafx.cpp 파일을 열고 #include "stdafx.h" 와 같이 타이핑합니다.

    2. stdafx.h 파일을 열고, 맨 윗줄에 #pragma once 라고 타이핑합니다.
       ( stdafx.h 파일을 딱 한번말 빌드 하라는 의미입니다.
          #pragma 키워드에 대해서는 나중에 다시 알아볼 기회가 있을 것입니다)

    3. 모든 cpp 파일에 #include "stdafx.h" 를 입력해 줍니다.


    자, 이제 모든 세팅이 끝났습니다.

    깔끔하게 Ctrl+Alt+F7을 눌러 프로젝트를 완전히 다시 빌드 한후, 컴파일을 해보세요.^^

    - Dark GDK Tip 퍼옴 -

    댓글

Designed by Tistory.