문제

Visual C ++ 6에있는 샘플 프로젝트 (광산이 아님)가 있습니다. Visual Studio 2008로 변환하려고합니다.

이전 프로젝트는 사전 컴파일 된 헤더를 사용하고 있습니다. 이제 질문은 다음과 같습니다.

  1. 사전 컴파일 된 헤더 란 무엇입니까?

  2. 이전 프로젝트는 사전 컴파일 된 헤더를 사용하고 있기 때문에. 또한 Visual Studio 2008 (The New Project)에서도 사용하겠습니다. 그러나 나는 그렇게 말하는 오류가 발생합니다 "stdafx.h를 포함하는 것을 잊었습니까?", 문제를 해결하기 위해 모든 소스 파일에 "stdafx.h"를 포함시킵니다. 그것은 완벽하게 작동했습니다. 그러나 오래된 프로젝트는 모든 파일에 "stdafx.h"를 포함하지 않았습니까? 그런 다음 각 소스 파일에 "stdafx.h"를 포함하도록 어떻게 선택할 수 있습니까? 모든 소스 파일에 "stdafx.h"에 정의 된 포함 파일이 필요한 것은 아니기 때문에 거의 거의 없습니다. 그게 어떻게 끝났어?

편집하다: 프리 컴파일 된 헤더를 사용하여 일부 파일을 어떻게 배출합니까?

도움이 되었습니까?

해결책

사전 컴파일 된 헤더 란 무엇입니까?

종종 C ++ 소스 파일에는 외부 라이브러리의 헤더가 포함됩니다. 창문에는 포함됩니다 windows.h. 이 헤더 파일은 매우 클 수 있으며 처리하는 데 시간이 걸립니다. C ++ 파일을 컴파일 할 때마다 컴파일러는이 헤더 파일에서 수천 개의 라인을 읽고 처리해야합니다. 그러나 외부 라이브러리는 변경되지 않으며이 파일 만 처리하고 결과를 저장하면 많은 시간을 절약 할 수 있습니다.

사전 컴파일 된 헤더는 단순히 나중에 컴파일러에서 계속 사용할 수있는 중간 형식으로 처리 된 헤더 파일입니다.

Visual C ++의 프리 컴파일 헤더

Visual C ++에서는 관례입니다 #include 변경하지 않는 헤더 파일을 모두 stdafx.h. 그런 다음 컴파일러에게 사전 컴파일 된 헤더를 만들도록 지시합니다. stdafx.pch 컴파일하는 동안 stdafx.cpp 포함하는 것 외에는 아무것도하지 않습니다 stdafx.h. 다른 사람의 선행 헤더를 사용하려면 .cpp 포함 해야하는 파일 stdafx.h 첫 번째는 파일을 포함하고 사용하는 컴파일러를 포함합니다. stdafx.pch 사전 컴파일 된 헤더 용.

포함하지 않는 것에 대한 오류가 발생하면 stdafx.h 컴파일러에 해당 특정 소스 파일에 대한 사전 컴파일 된 헤더를 사용하지 않도록 지시하면됩니다. (또는 포함 할 수 있습니다 stdafx.h.)

개별 소스 파일에 대한 프리 컴파일 된 헤더 설정

Visual C ++를 사용하면 전체 프로젝트 및 개별 파일의 컴파일러 설정을 제어 할 수 있습니다. 개별 속성에 액세스하려면 솔루션 탐색기에서 소스 파일을 선택하고 마우스 오른쪽 버튼을 클릭하고 선택하십시오. 속성 맥락 메뉴에서. 사전 컴파일 된 헤더 옵션은 다음에 있습니다 구성 속성 => C/C ++ => 사전 컴파일 된 헤더. 이 설정을 수정하면 종종 모든 구성에 대해이를 수행하려고합니다 (예 : 디버그 그리고 풀어 주다).

사전 컴파일 된 헤더를 사용하는 경우 컴파일러에 사용하도록 지시하는 전체 프로젝트에 대한 설정이 있습니다. stdafx.pch 사전 컴파일 된 헤더의 경우. 그만큼 stdafx.cpp 컴파일러가 생성하도록 지시하는 개별 설정이 있습니다. stdafx.pch, 그리고 포함되지 않은 소스 파일이있는 경우 stdafx.h 사전 컴파일 된 헤더를 사용하지 않도록 개별 설정을 설정할 수 있습니다.

다른 팁

코드를 컴파일하면 컴파일러는 모든 #included 헤더를 검토하여 .CPP 파일에서 코드를 컴파일하는 방법을 알아야합니다.

대규모 프로젝트 (또는 MFC와 같은 라이브러리를 사용하는 프로젝트)를 사용하면이 헤더가 크게 증가 할 수 있으므로 컴파일하는 데 오랜 시간이 걸립니다.

이러한 헤더의 대부분은이 헤더가 자주 변경되지 않기 때문에 컴파일러가 "사전 컴파일"하도록 할 수 있습니다.이를 처리하고 상태를 사전 컴파일 된 헤더로 저장합니다. 다음에 컴파일하면 모든 헤더를 다시 읽고 컴파일 할 필요가 없으므로 훨씬 빠릅니다.

Visual Studio의 한 가지 요구 사항은 사전 컴파일 된 헤더를 사용하는 경우 프로젝트의 모든 파일에 포함되어야한다는 것입니다.

프로젝트가 작거나 자주 빌드하지 않으면 "프리 컴파일 헤더"옵션을 비활성화 할 수 있습니다 (프로젝트 설정에서. 전부의 프로젝트). 당신이 얻을 수있는 유일한 효과는 더 느리게 컴파일 할 수 있다는 것입니다. 또는 옵션을 활성화하고 #include "stdafx.h"를 모든 파일에 포함시키기 때문에 #include "stdafx.h"를 추가하십시오.

  1. 보다 MSDN
  2. 대개. 모든 CPP 파일에 "stdafx.h"를 포함해야합니다. 요점은 그들이 사전 컴파일 된 것이며, 당신은 일부 콘크리트 파일에 그들 모두가 사용되는 것은 아니라고 걱정할 필요가 없습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top