Jak naprawić brakujący plik .pch w kompilacji?


164

Kiedy buduję swoje rozwiązanie C ++ w programie Visual Studio, narzeka, że ​​brakuje pliku xxxxx.pch. Czy brakuje mi ustawienia, aby odzyskać wstępnie skompilowane nagłówki?

oto dokładny błąd kompletności:

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

1
musisz podać więcej informacji. jaki dokładnie błąd otrzymujesz? jak jest obecnie skonfigurowany Twój projekt?
Assaf Lavie

Tylko prosta przebudowa rozwiązała mój problem.
Deqing

Odpowiedzi:


436

UWAGA: Późniejsze wersje IDE mogą używać „pch” zamiast „stdafx” w domyślnych nazwach powiązanych plików. Może być konieczne zastąpienie pch stdafx w instrukcjach poniżej. Przepraszam. To nie moja wina.

  1. Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań.
  2. Kliknij Właściwości u dołu menu rozwijanego.
  3. W lewym górnym rogu stron właściwości wybierz z menu rozwijanego opcję Wszystkie konfiguracje.
  4. Otwórz drzewo C / C ++ i wybierz wstępnie skompilowane nagłówki
  5. Prekompilowany nagłówek: Wybierz Użyj (/ Yu)
  6. Wypełnij pole Precompiled Header File. Standard to stdafx.h
  7. Kliknij OK

  8. Jeśli nie masz stdafx.h w swoich plikach nagłówkowych, umieść go tam. Edytuj go, aby # zawierał wszystkie nagłówki, które chcesz skompilować.

  9. Umieść plik o nazwie stdafx.cpp w swoim projekcie. Umieść #include „stdafx.h” na początku i nic więcej.
  10. Kliknij prawym przyciskiem myszy stdafx.cpp w Eksploratorze rozwiązań. Wybierz ponownie Właściwości i Wszystkie konfiguracje, jak w kroku 4 ...
  11. ... ale tym razem wybierz Precompiled Header Create (/ Yc). Spowoduje to powiązanie tylko z jednym plikiem stdafx.cpp.
  12. Umieść #include „stdafx.h” na samej górze wszystkich plików źródłowych.

Lucky 13. Trzymaj kciuki i naciśnij Build.


58
Nie wiedziałem, że stdafx.cpp powinien mieć inne ustawienia. Świetna odpowiedź.
ekspert

5
To powinna być akceptowana odpowiedź, ponieważ w drugiej brakuje kroków 10 i 11. Dzięki!
JBentley,

2
To jest bardziej podstawowa odpowiedź niż moja. Kroki 1-7 są konieczne, aby PCH działało, ale komunikat o błędzie z pytania wskazuje, że te kroki zostały już wykonane. OTOH, zakłada pojedynczy stdafx.pchplik, podczas gdy xxxxx.pchz pytania wskazuje na bardziej złożony problem (konfiguracja z wieloma PCH).
MSalters

1
Ta odpowiedź naprawdę uratowała sytuację. Dzięki.
Matt Craig,

Dziękuję Panu! Wracając do moich korzeni w C / C ++ r dla nowego projektu i czuję się trochę spazm
Colby Africa

59

Użycie prekompilowanego nagłówka (pch) jest procesem dwuetapowym.

W kroku pierwszym kompilujesz plik pośredniczący (w VS200x jest on zwykle nazywany stdafx.cpp. Nowsze wersje używają pch.cpp.). Ten plik pośredni zawiera pośrednio tylko nagłówki, które chcesz skompilować. Zwykle jeden mały nagłówek (zwykle stdafx.hlub pch.hpp) zawiera listę standardowych nagłówków, takich jak <iostream>i <string>, które są następnie umieszczane w pliku pośredniczącym. Kompilowanie tego powoduje utworzenie pliku .pch.

W kroku 2 rzeczywisty kod źródłowy zawiera ten sam mały nagłówek z kroku 1, co pierwszy nagłówek. Kompilator, gdy napotka ten specjalny nagłówek, odczytuje zamiast niego odpowiedni plik .pch. Oznacza to, że nie musi za każdym razem (ponownie) kompilować tych standardowych nagłówków.

W twoim przypadku wydaje się, że krok 1 nie powiódł się. Czy plik pośredniczący jest nadal obecny? W twoim przypadku prawdopodobnie tak by było xxxxx.cpp. Musi to być plik, który jest kompilowany /Yc:xxxxx.pch, ponieważ jest to flaga kompilatora wskazująca, że ​​jest to pierwszy krok procesu PCH. Jeśli xxxxx.cppjest obecny i jest takim plikiem pośredniczącym, prawdopodobnie brakuje /Yc:opcji kompilatora.


13
to prawdopodobnie brakuje opcji kompilatora / Yc:. Nawiasem mówiąc, opcja znajduje się w Project Property Pages / Configuration Properties / C-C ++ / Precompiled Headers
wip

22

Naprawić:

  1. Upewnij się, że masz w projekcie xxxxx.cpp

  2. Skompiluj xxxxx.cpp z flagą / Yc ( Utwórz prekompilowany nagłówek)
    (kliknij prawym przyciskiem myszy xxxxx.cpp -> właściwości -> Prekompilowane nagłówki -> utwórz )

  3. Skompiluj wszystkie inne pliki z flagą / Yu ( Użyj prekompilowanego nagłówka)
    (kliknij prawym przyciskiem myszy projekt -> właściwości -> Prekompilowane nagłówki -> użyj )


To mnie naprawiło. Dziękuję Ci bardzo!
Charles W

7
  1. Kliknij prawym przyciskiem myszy projekt i wybierz element menu właściwości
  2. goto C / C ++ -> Prekompilowane nagłówki
  3. Wybierz opcję Nie używaj prekompilowanych nagłówków

To zadziałało dla mnie. Usunąłem plik „stdafx.cpp”, a gdy dodałem go z powrotem, ten błąd nie zniknął, dopóki nie wyłączyłem prekompilowanych nagłówków. Projekt i tak jest mały, więc nie ma większego znaczenia dla szybkości.
Contango

3
4. WybierzCreate (/Yc) (aby przywrócić, a następnie użyj go ponownie)
Bitterblue

2

Tak, można go wyeliminować za pomocą opcji / Yc, jak wskazali inni, ale najprawdopodobniej nie trzeba go dotykać, aby to naprawić. Dlaczego otrzymujesz ten błąd w pierwszej kolejności bez zmiany jakichkolwiek ustawień? Być może „wyczyściłeś” projekt i spróbowałeś skompilować pojedynczy plik CPP. W takim przypadku wystąpiłby ten błąd, ponieważ brakuje teraz nagłówka prekompilatora. Po prostu zbuduj cały projekt (nawet jeśli się nie powiedzie), a następnie zbuduj pojedynczy plik cpp, a nie otrzymasz tego błędu.


2

W przypadku, gdy dzieje się to w przypadku kompilacji serwera (AppCenter) i korzystasz z CocoaPods, upewnij się, że Twój plik Podfile jest zarejestrowany.

AppCenter uruchamia polecenie „pod install” tylko wtedy, gdy znajdzie plik Pofile i NIE znajdzie folderu PODS w plikach.

Miałem folder zaewidencjonowany, ale ponieważ git automatycznie ignoruje pliki .pch (sprawdź .gitignore, aby to zweryfikować), mój plik .pch nie został wpisany.

Rozwiązałem swój problem, zmuszając pliki .pch do sprawdzenia go, ale usunięcie folderu PODS również powinno działać, ponieważ Appcenter uruchomi w takim przypadku polecenie instalacji pod.

Mam nadzieję, że to komuś pomoże.


0

Jeśli wszystko jest w porządku, ale ten błąd jest obecny, należy sprawdzić następną sekcję w pliku ****. Vcxproj:

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

W moim przypadku była to niepoprawna nazwa konfiguracji: tylko pierwsze słowo.


0

Wiem, że ten temat jest bardzo stary, ale ostatnio miałem do czynienia z tym w VS2015 i pomogło mi usunięcie folderów kompilacji i ponowne zbudowanie. Może się to zdarzyć z powodu próby zamknięcia programu lub zatrzymania / wstrzymania programu VS podczas budowania.


Tak, ale pierwotne pytanie dotyczyło VS2008, a nie VS2015. Czy masz pewność, że to rozwiązałoby problem PO?
T-Heron,

Niezależnie od wersji VS, problem nadal występuje w różnych kompilacjach. Po prostu spróbuj tego i zobacz, czy zadziała w przypadku tego, z czym masz do czynienia.
glover 12

0

Szukałem pliku iOS PCH z tym samym problemem, jeśli jesteś tutaj taki jak ja, rozwiązaniem, które znalazłem, jest wyczyszczenie danych pochodnych; Zamknij symulator (y), przejdź do prefs xCode -> lokalizacje -> przejdź do ścieżki pliku danych pochodnych, zamknij xCode, usuń pliki w folderze danych pochodnych, uruchom ponownie i pozdrawiam :)


-1

Wypróbuj Build> Clean Solution, a następnie Build> Build Solution. To działa dla mnie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.