빌드에서 누락 된 .pch 파일을 고치는 방법?


164

Visual Studio에서 c ++ 솔루션을 빌드하면 xxxxx.pch 파일이 누락되었다고 불평합니다. 사전 컴파일 된 헤더를 다시 가져 오기 위해 누락 된 설정이 있습니까?

완전성에 대한 정확한 오류는 다음과 같습니다.

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory

1
더 많은 정보를 제공해야합니다. 정확히 어떤 오류가 발생합니까? 프로젝트는 현재 어떻게 구성되어 있습니까?
Assaf Lavie

간단한 재건으로 모든 문제가 해결되었습니다.
Deqing

답변:


436

참고 : 최신 버전의 IDE는 관련 파일의 기본 이름에 "stdafx"대신 "pch"를 사용할 수 있습니다. 아래 지침에서 pda를 stdafx로 대체해야 할 수도 있습니다. 죄송합니다. 내 잘못이 아니에요.

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 드롭 다운 메뉴 하단에서 속성을 클릭하십시오.
  3. 속성 페이지의 왼쪽 상단에있는 드롭 다운 메뉴에서 모든 구성을 선택하십시오.
  4. C / C ++ 트리를 열고 사전 컴파일 된 헤더를 선택하십시오.
  5. 미리 컴파일 된 헤더 : 사용 (/ Yu) 선택
  6. 사전 컴파일 된 헤더 파일 필드를 채우십시오. 표준은 stdafx.h
  7. 확인을 클릭하십시오

  8. 헤더 파일에 stdafx.h가 없으면 거기에 넣으십시오. 미리 컴파일하려는 모든 헤더를 #include하도록 편집하십시오.

  9. stdafx.cpp라는 파일을 프로젝트에 넣습니다. #include "stdafx.h"를 맨 위에 넣으십시오.
  10. 솔루션 탐색기에서 stdafx.cpp를 마우스 오른쪽 버튼으로 클릭하십시오. 4 단계와 같이 속성 및 모든 구성을 다시 선택하십시오 ...
  11. ...하지만 이번에는 사전 컴파일 된 헤더 작성 (/ Yc)을 선택하십시오 . 이것은 하나의 파일 stdafx.cpp에만 바인드됩니다.
  12. 모든 소스 파일의 맨 위에 #include "stdafx.h"를 넣으십시오.

운이 좋은 13. 손가락을 교차시키고 빌드를 누르십시오.


58
stdafx.cpp에 다른 설정이 있어야한다는 것을 몰랐습니다. 좋은 대답입니다.
전문가

5
다른 답변은 10 단계와 11 단계가 누락되었으므로이 답변이 허용됩니다. 감사합니다!
JBentley

2
이것은 내 것보다 더 기본적인 대답입니다. PCH가 작동하려면 1-7 단계가 필요하지만 질문의 오류 메시지는 해당 단계가 이미 완료되었음을 나타냅니다. OTOH는 단일 stdafx.pch파일을 가정 하지만 xxxxx.pch질문에서 더 복잡한 문제 (다중 PCH 설정)를 암시합니다.
MSalters

1
이 답변은 실제로 하루를 구했습니다. 감사.
Matt Craig

감사합니다! 새로운 프로젝트를 위해 C / C ++ r 루트로 돌아가서 약간의 스파 스처럼 느껴집니다
Colby Africa

59

사전 컴파일 된 헤더 (pch) 사용은 2 단계 프로세스입니다.

1 단계에서는 스텁 파일을 컴파일합니다 (VS200x에서는 일반적으로 stdafx.cpp. 최신 버전은 pch.cpp.). 이 스텁 파일에는 사전 컴파일 할 헤더 만 간접적으로 포함됩니다. 일반적으로 하나의 작은 헤더 (보통stdafx.h 또는 pch.hpp)는 <iostream>and와 같은 표준 헤더를 나열하며이 헤더 <string>는 스텁 파일에 포함됩니다. 이를 컴파일하면 .pch 파일이 생성됩니다.

2 단계에서 실제 소스 코드에는 1 단계의 첫 번째 헤더와 동일한 작은 헤더가 포함됩니다. 컴파일러는이 특수 헤더를 만나면 해당 .pch 파일을 대신 읽습니다. 즉, 매번 표준 헤더를 (재) 컴파일 할 필요가 없습니다.

귀하의 경우 1 단계가 실패한 것 같습니다. 스텁 파일이 여전히 존재합니까? 귀하의 경우 아마 그럴 것입니다 xxxxx.cpp. 이 파일 /Yc:xxxxx.pch은 PCH 프로세스의 1 단계임을 나타내는 컴파일러 플래그이므로로 컴파일 된 파일이어야합니다 . 경우 xxxxx.cpp존재하고 아마의 실종, 이러한 스텁 파일 /Yc:컴파일러 옵션을.


13
그런 다음 / Yc : 컴파일러 옵션이 누락되었을 수 있습니다. 그런데 옵션은 프로젝트 속성 페이지 / 구성 속성 / C-C ++ / 미리 컴파일 된 헤더에 있습니다
wip

22

고치다:

  1. 프로젝트에 xxxxx.cpp가 있는지 확인하십시오

  2. / Yc 플래그를 사용하여 xxxxx.cpp 를 컴파일 하십시오 ( 사전 컴파일 된 헤더 작성 )
    (xxxxx.cpp-> 특성-> 사전 컴파일 된 헤더-> 작성 ).

  3. / Yu 플래그를 사용 하여 다른 모든 파일 을 컴파일 하십시오 ( 사전 컴파일 된 헤더 사용 )
    (프로젝트-> 특성-> 사전 컴파일 된 헤더-> 사용을 마우스 오른쪽 단추로 클릭하십시오 )


이것은 나를 고쳤다. 대단히 감사합니다!
CharlesW

7
  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성 메뉴 항목을 선택하십시오.
  2. goto C / C ++-> 사전 컴파일 된 헤더
  3. 미리 컴파일 된 헤더를 사용하지 않음을 선택하십시오.

이것은 나를 위해 일했습니다. "stdafx.cpp"를 삭제 한 후 다시 추가하면 미리 컴파일 된 헤더를 끌 때까지이 오류가 사라지지 않습니다. 어쨌든 프로젝트는 작기 때문에 속도에 큰 차이가없는 것처럼 보입니다.
Contango

3
4.Create (/Yc) (복원하고 다시 사용하려면)을 선택하십시오
Bitterblue

2

그렇습니다. 다른 사람들이 지적한 것처럼 / Yc 옵션으로 제거 할 수는 있지만 수정하기 위해 만질 필요는 없습니다. 설정을 변경하지 않고 왜이 오류가 발생합니까? 프로젝트를 '정리'하고 단일 cpp 파일을 컴파일하려고 시도했을 수 있습니다. 이 경우 프리 컴파일러 헤더가 없기 때문에이 오류가 발생합니다. 성공하지 못한 경우에도 전체 프로젝트를 빌드하고 단일 cpp 파일을 빌드하는 것보다이 오류가 발생하지 않습니다.


2

서버 빌드 (AppCenter)에서이 문제가 발생하고 CocoaPods를 사용하여 Podfile이 체크인되었는지 확인하십시오.

AppCenter는 Pofile을 찾고 파일에서 PODS 폴더를 찾지 못하면 "pod install"명령 만 실행합니다.

폴더가 체크인되었지만 git은 자동으로 .pch 파일을 무시하므로 (.gitignore를 확인하여이를 확인하십시오) 내 .pch가 체크인되지 않았습니다.

.pch 파일을 확인하여 문제를 정렬했지만 Appcenter가 pod install 명령을 실행하기 때문에 PODS 폴더 삭제도 작동해야합니다.

다행히도 이것은 누군가를 돕는다.


0

모든 것이 맞지만이 실수가있는 경우 ****. vcxproj 파일에서 다음 섹션을 확인해야합니다.

<ClCompile Include="stdafx.cpp">
  <PrecompiledHeader Condition=

필자의 경우 구성 이름이 잘못되었습니다. 첫 번째 단어 만 있습니다.


0

나는이 주제가 매우 오래되었다는 것을 알고 있지만 최근 VS2015 에서이 문제를 다루었 고 빌드 폴더를 삭제하고 다시 빌드하는 데 도움이되었습니다. 이것은 프로그램을 닫으려고 시도하거나 빌드하는 동안 VS를 정지 / 정지하는 프로그램으로 인해 발생할 수 있습니다.


예, 그러나 원래 질문은 VS2015가 아니라 VS2008과 관련이 있습니다. 이것이 OP의 문제를 해결할 것이라는 확신이 있습니까?
T-Heron

VS 버전에 관계없이 다른 빌드에서 문제가 계속 발생합니다. 시도해보고 처리하려는 것이 무엇이든 작동하는지 확인하십시오.
glover12

0

나는 같은 문제가있는 iOS PCH 파일을 찾고 있었고, 나처럼 여기에 있다면 내가 찾은 해결책은 파생 된 데이터를 지우는 것입니다. 시뮬레이터를 닫고 xCode prefs로 이동-> 위치-> 파생 데이터 파일 경로로 이동, xCode를 닫고 파생 데이터 폴더에서 파일 삭제, 다시 시작 및 응원 :)


-1

빌드> 솔루션 정리를 선택한 다음 빌드> 솔루션 빌드를 시도하십시오. 이것은 나를 위해 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.