Comment réparer le fichier .pch manquant lors de la construction?

164

Lorsque je crée ma solution c ++ dans Visual Studio, il se plaint que le fichier xxxxx.pch est manquant. Y a-t-il un paramètre qui me manque pour récupérer les en-têtes pré-compilés?

voici l'erreur exacte pour l'exhaustivité:

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory
Sam Mackrill
la source
1
vous devez fournir plus d'informations. quelle erreur obtenez-vous exactement? comment votre projet est-il actuellement configuré?
Assaf Lavie
Une simple reconstruction a résolu mon problème.
Deqing le

Réponses:

436

REMARQUE: les versions ultérieures de l'EDI peuvent utiliser «pch» plutôt que «stdafx» dans les noms par défaut des fichiers associés. Il peut être nécessaire de remplacer pch par stdafx dans les instructions ci-dessous. Je m'excuse. Ce n'est pas de ma faute.

  1. Cliquez avec le bouton droit sur votre projet dans l'Explorateur de solutions.
  2. Cliquez sur Propriétés au bas du menu déroulant.
  3. En haut à gauche des pages de propriétés, sélectionnez Toutes les configurations dans le menu déroulant.
  4. Ouvrez l'arborescence C / C ++ et sélectionnez En-têtes précompilés
  5. En-tête précompilé: sélectionnez Utiliser (/ Yu)
  6. Remplissez le champ Fichier d'en-tête précompilé. La norme est stdafx.h
  7. Cliquez sur OK

  8. Si vous n'avez pas stdafx.h dans vos fichiers d'en-tête, placez-le là. Modifiez-le pour # inclure tous les en-têtes que vous souhaitez précompiler.

  9. Placez un fichier nommé stdafx.cpp dans votre projet. Mettez #include "stdafx.h" en haut de celui-ci, et rien d'autre.
  10. Cliquez avec le bouton droit sur stdafx.cpp dans l'Explorateur de solutions. Sélectionnez à nouveau Propriétés et Toutes les configurations comme à l'étape 4 ...
  11. ... mais cette fois, sélectionnez Créer un en- tête précompilé (/ Yc). Cela ne se liera qu'au seul fichier stdafx.cpp.
  12. Mettez #include "stdafx.h" tout en haut de tous vos fichiers source.

Lucky 13. Croisez vos doigts et appuyez sur Construire.

Jive Dadson
la source
58
Je ne savais pas que stdafx.cpp devrait avoir un paramètre différent. Très bonne réponse.
expert
5
Cela devrait être la réponse acceptée, car l'autre ne comporte pas les étapes 10 et 11. Merci!
JBentley
2
C'est une réponse plus fondamentale que la mienne. Les étapes 1 à 7 sont nécessaires pour que PCH fonctionne, mais le message d'erreur de la question indique que ces étapes ont déjà été effectuées. OTOH, il suppose un seul stdafx.pchfichier, tandis que la xxxxx.pchquestion de la question fait allusion à un problème plus complexe (configuration multi-PCH).
MSalters
1
Cette réponse a vraiment sauvé la mise. Merci.
Matt Craig
Merci Monsieur! Revenant à mes racines C / C ++ r pour un nouveau projet et je me sens comme un peu un spaz
Colby Africa
59

L'utilisation de l'en-tête précompilé (pch) est un processus en deux étapes.

Dans la première étape, vous compilez un fichier stub (dans VS200x, il est généralement appelé stdafx.cpp. Les versions plus récentes utilisent pch.cpp.). Ce fichier stub inclut indirectement uniquement les en-têtes que vous souhaitez précompiler. En règle générale, un petit en-tête (généralement stdafx.hou pch.hpp) répertorie les en-têtes standard tels que <iostream>et <string>, et il est ensuite inclus dans le fichier stub. La compilation crée le fichier .pch.

À l'étape 2, votre code source réel inclut le même petit en-tête de l'étape 1 que le premier en-tête. Le compilateur, lorsqu'il rencontre cet en-tête spécial, lit le fichier .pch correspondant à la place. Cela signifie qu'il n'a pas à (re) compiler ces en-têtes standard à chaque fois.

Dans votre cas, il semble que l'étape 1 échoue. Le fichier stub est-il toujours présent? Dans votre cas, ce serait probablement le cas xxxxx.cpp. Il doit s'agir d'un fichier compilé avec /Yc:xxxxx.pch, car c'est l'indicateur du compilateur pour indiquer qu'il s'agit de l'étape 1 du processus PCH. Si xxxxx.cppest présent, et est un tel fichier stub, alors il manque probablement son /Yc:option de compilation.

MSalters
la source
13
alors il manque probablement son option / Yc: compiler. À propos, l'option se trouve dans les pages de propriétés du projet / Propriétés de configuration / C-C ++ / En-têtes précompilés
wip
22

Réparer:

  1. Assurez-vous d'avoir xxxxx.cpp dans votre projet

  2. Compilez xxxxx.cpp avec l' indicateur / Yc ( Créer un en- tête précompilé)
    (clic droit sur xxxxx.cpp -> propriétés -> En-têtes précompilés -> créer )

  3. Compilez tous les autres fichiers avec le drapeau / Yu ( Utiliser l'en- tête précompilé)
    (clic droit sur le projet -> propriétés -> En-têtes précompilés -> utiliser )

franckspike
la source
Cela m'a arrangé. Merci beaucoup!
CharlesW
7
  1. Cliquez avec le bouton droit sur le projet et sélectionnez l'élément de menu des propriétés
  2. goto C / C ++ -> En-têtes précompilés
  3. Sélectionnez Ne pas utiliser les en-têtes précompilés
jpabess
la source
Cela a fonctionné pour moi. J'avais supprimé "stdafx.cpp", puis quand je l'ai rajouté, cette erreur ne disparaîtrait pas tant que je n'aurais pas désactivé les en-têtes précompilés. Le projet est minuscule de toute façon, donc ce n'est pas comme si cela faisait une grande différence sur la vitesse.
Contango
3
4. SélectionnezCreate (/Yc) (pour restaurer puis réutiliser)
Bitterblue
2

Oui, il peut être éliminé avec les options / Yc comme d'autres l'ont souligné, mais vous n'aurez probablement pas besoin de le toucher pour le réparer. Pourquoi obtenez-vous cette erreur en premier lieu sans modifier aucun paramètre? Vous avez peut-être «nettoyé» le projet et essayé de compiler un seul fichier cpp. Vous obtiendrez cette erreur dans ce cas car l'en-tête du précompilateur est maintenant manquant. Construisez simplement l'ensemble du projet (même en cas d'échec) et créez un seul fichier cpp et vous n'obtiendrez pas cette erreur.

zar
la source
2

Si cela vous arrive sur une version de serveur (AppCenter) et que vous utilisez CocoaPods, assurez-vous que votre Podfile est archivé.

AppCenter n'exécute la commande «pod install» que s'il trouve un Pofile et qu'il NE trouve PAS le dossier PODS sur les fichiers.

J'ai fait archiver le dossier, mais comme git ignore automatiquement les fichiers .pch (vérifiez que vous .gitignore pour très bien le vérifier), mon .pch n'a pas été archivé.

J'ai trié mon problème en forçant les fichiers .pch à le vérifier, mais la suppression du dossier PODS devrait également fonctionner, car Appcenter exécutera la commande d'installation du pod dans ce cas.

J'espère que cela aide quelqu'un.

Marco Leite
la source
0

Si tout va bien, mais que cette erreur est présente, il faut vérifier la section suivante dans le fichier ****. Vcxproj:

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

Dans mon cas, il y avait un nom incorrect d'une configuration: seulement le premier mot.

Sergey ArcTechno
la source
0

Je sais que ce sujet est très ancien, mais je traitais récemment de cela dans VS2015 et ce qui a aidé était de supprimer les dossiers de construction et de les reconstruire. Cela peut être dû à la tentative de fermeture du programme ou à l'arrêt / gel du programme VS lors de la construction.

glover12
la source
Oui, mais la question initiale concernait VS2008, pas VS2015. Avez-vous la certitude que cela résoudrait le problème du PO?
T-Heron
Quelle que soit la version de VS, le problème se produit toujours dans différentes versions. Essayez simplement cela et voyez si cela fonctionne pour celui avec lequel vous avez affaire.
glover12
0

Je cherchais le fichier iOS PCH ayant le même problème, si vous êtes ici comme moi aussi, la solution que j'ai trouvée est en effaçant les données dérivées; Fermez le (s) simulateur (s), allez dans les préférences de xCode -> emplacements -> allez dans le chemin du fichier de données dérivé, fermez xCode, supprimez les fichiers dans le dossier de données dérivé, relancez et applaudissez :)

Ahmed Awad
la source
-1

Essayez Build> Clean Solution, puis Build> Build Solution. Cela fonctionne pour moi.

Nick Dong
la source