Come risolvere il file .pch mancante sulla build?


164

Quando creo la mia soluzione c ++ in Visual Studio, si lamenta che manca il file xxxxx.pch. C'è un'impostazione che mi manca per ripristinare le intestazioni precompilate?

ecco l'errore esatto per completezza:

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

1
devi fornire maggiori informazioni. che errore stai ottenendo esattamente? come è attualmente configurato il tuo progetto?
Assaf Lavie,

Solo una semplice ricostruzione ha risolto il mio problema.
Deqing,

Risposte:


436

NOTA: le versioni successive dell'IDE potrebbero utilizzare "pch" anziché "stdafx" nei nomi predefiniti per i file correlati. Potrebbe essere necessario sostituire pch per stdafx nelle istruzioni seguenti. Chiedo scusa. Non è colpa mia.

  1. Fare clic con il tasto destro del mouse sul progetto in Esplora soluzioni.
  2. Fai clic su Proprietà nella parte inferiore del menu a discesa.
  3. Nella parte superiore sinistra delle pagine delle proprietà, seleziona Tutte le configurazioni dal menu a discesa.
  4. Apri l'albero C / C ++ e seleziona Intestazioni precompilate
  5. Intestazione precompilata: selezionare Usa (/ Yu)
  6. Compila il campo File di intestazione precompilato. Lo standard è stdafx.h
  7. Fai clic su OK

  8. Se non hai stdafx.h nei tuoi File di intestazione mettilo lì. Modificalo per #includere tutte le intestazioni che desideri precompilate.

  9. Inserisci un file chiamato stdafx.cpp nel tuo progetto. Metti #include "stdafx.h" in cima ad esso, e nient'altro.
  10. Fare clic con il tasto destro su stdafx.cpp in Esplora soluzioni. Selezionare di nuovo Proprietà e Tutte le configurazioni come nel passaggio 4 ...
  11. ... ma questa volta selezionare Crea intestazione precompilata (/ Yc). Questo si legherà solo al file stdafx.cpp.
  12. Inserisci #include "stdafx.h" nella parte superiore di tutti i tuoi file di origine.

Lucky 13. Incrocia le dita e premi Build.


58
Non sapevo che stdafx.cpp avrebbe dovuto avere impostazioni diverse. Bella risposta.
esperto

5
Questa dovrebbe essere la risposta accettata, poiché nell'altro mancano i passaggi 10 e 11. Grazie!
JBentley,

2
Questa è una risposta più semplice della mia. I passaggi 1-7 sono necessari per far funzionare PCH, ma il messaggio di errore della domanda indica che questi passaggi sono già stati eseguiti. OTOH, presuppone un singolo stdafx.pchfile, mentre xxxxx.pchdalla domanda si accenna a un problema più complesso (installazione multi-PCH).
MSalter

1
Questa risposta ha davvero salvato la giornata. Grazie.
Matt Craig,

Grazie Signore! Tornando alle mie radici C / C ++ per un nuovo progetto e mi sento un po 'spaziale
Colby Africa

59

L'uso dell'intestazione precompilata (pch) è un processo in due fasi.

Nel primo passaggio, si compila un file stub (in VS200x di solito viene chiamato stdafx.cpp. Le versioni più recenti usano pch.cpp.). Questo file stub include indirettamente solo le intestazioni che si desidera precompilare. In genere, una piccola intestazione (di solito stdafx.ho pch.hpp) elenca le intestazioni standard come <iostream>e <string>, e questo viene quindi incluso nel file stub. Compilando questo si crea il file .pch.

Nel passaggio 2, il codice sorgente effettivo include la stessa piccola intestazione del passaggio 1 della prima intestazione. Il compilatore, quando incontra questa intestazione speciale, legge invece il file .pch corrispondente. Ciò significa che non è necessario (ri) compilare quelle intestazioni standard ogni volta.

Nel tuo caso, sembra che il passaggio 1 non riesca. Il file stub è ancora presente? Nel tuo caso, probabilmente lo sarebbe xxxxx.cpp. Deve essere un file che viene compilato /Yc:xxxxx.pch, poiché quello è il flag del compilatore per indicare che è il passaggio 1 del processo PCH. Se xxxxx.cppè presente ed è un tale file stub, probabilmente manca l' /Yc:opzione del compilatore.


13
quindi probabilmente manca l'opzione / Yc: compilatore. Dal modo in cui l'opzione si trova in Project Pagine delle proprietà / Proprietà di configurazione / C-C ++ / intestazioni precompilate
wip

22

fix:

  1. Assicurati di avere xxxxx.cpp nel tuo progetto

  2. Compila xxxxx.cpp con / Yc flag ( Crea intestazione precompilata)
    (fai clic destro su xxxxx.cpp -> proprietà -> Intestazioni precompilate -> crea )

  3. Compila tutti gli altri file con / Yu flag ( Usa intestazione precompilata)
    (fai clic con il tasto destro del mouse sul progetto -> proprietà -> Intestazioni precompilate -> usa )


Questo mi ha risolto. Grazie mille!
CharlesW

7
  1. Fare clic con il tasto destro del mouse sul progetto e selezionare la voce di menu delle proprietà
  2. vai a C / C ++ -> Intestazioni precompilate
  3. Selezionare Non utilizzare intestazioni precompilate

Questo ha funzionato per me. Avevo eliminato "stdafx.cpp", quindi quando l'ho aggiunto di nuovo, questo errore non spariva finché non disattiva le intestazioni precompilate. Il progetto è comunque minuscolo, quindi non è che faccia molta differenza alla velocità.
Contango,

3
4. SelezionareCreate (/Yc) (per ripristinare e quindi riutilizzarlo)
Bitterblue,

2

Sì, può essere eliminato con le opzioni / Yc come altri hanno sottolineato, ma molto probabilmente non dovresti toccarlo per risolverlo. Perché stai ricevendo questo errore in primo luogo senza modificare le impostazioni? Potresti aver "ripulito" il progetto e provare a compilare un singolo file cpp. Si otterrebbe questo errore in quel caso perché manca l'intestazione del precompilatore. Basta compilare l'intero progetto (anche se non ha esito positivo) e quindi creare un singolo file cpp e non si otterrà questo errore.


2

Nel caso ciò accada su un server (AppCenter) e stai usando CocoaPods assicurati che il tuo Podfile sia archiviato.

AppCenter esegue il comando "pod install" solo se trova un Pofile e NON trova la cartella PODS sui file.

Ho fatto il check-in della cartella, ma poiché git ignora automaticamente i file .pch (controlla .gitignore per risolvere il problema), il mio .pch non è stato registrato.

Ho risolto il problema forzando i file .pch a controllarlo, ma anche l'eliminazione della cartella PODS dovrebbe funzionare, poiché Appcenter eseguirà il comando di installazione del pod in quel caso.

Fortunatamente questo aiuta qualcuno.


0

Se tutto è corretto, ma questo errore è presente, è necessario controllare la sezione successiva nel file ****. Vcxproj:

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

Nel mio caso c'era un nome errato di una configurazione: solo la prima parola.


0

So che questo argomento è molto vecchio, ma di recente ho avuto a che fare con questo in VS2015 e ciò che mi ha aiutato è stato eliminare le cartelle di build e ricostruirlo. Ciò può accadere a causa del tentativo di chiudere il programma o di un programma che interrompe / congela VS durante la creazione.


Sì, ma la domanda originale riguardava VS2008, non VS2015. Hai la certezza che ciò risolverebbe il problema del PO?
T-Heron,

Indipendentemente dalla versione VS, il problema si verifica ancora tra build diverse. Provalo e vedi se funziona per qualunque cosa avresti a che fare.
glover12,

0

Stavo cercando il file PCH iOS con lo stesso problema, se sei arrivato anche tu come me, la soluzione che ho trovato è cancellare i dati derivati; Chiudi simulatore / i, vai a pre preferenze xCode -> posizioni -> vai al percorso del file di dati derivati, chiudi xCode, elimina i file nella cartella dei dati derivati, riavvia e saluti :)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.