¿Cómo reparar el archivo .pch que falta en la compilación?

164

Cuando construyo mi solución c ++ en Visual Studio, se queja de que falta el archivo xxxxx.pch. ¿Hay alguna configuración que me falta para recuperar los encabezados precompilados?

Aquí está el error exacto de integridad:

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory
Sam Mackrill
fuente
1
Tienes que proporcionar más información. ¿Qué error estás recibiendo exactamente? ¿Cómo está configurado su proyecto actualmente?
Assaf Lavie
Solo una simple reconstrucción todo solucionó mi problema.
Deqing

Respuestas:

436

NOTA: Las versiones posteriores del IDE pueden usar "pch" en lugar de "stdafx" en los nombres predeterminados para los archivos relacionados. Puede ser necesario sustituir pch por stdafx en las instrucciones a continuación. Me disculpo. No es mi culpa.

  1. Haga clic derecho en su proyecto en el Explorador de soluciones.
  2. Haga clic en Propiedades en la parte inferior del menú desplegable.
  3. En la parte superior izquierda de las páginas de propiedades, seleccione Todas las configuraciones en el menú desplegable.
  4. Abra el árbol C / C ++ y seleccione Encabezados precompilados
  5. Encabezado precompilado: Seleccione Usar (/ Yu)
  6. Complete el campo Archivo de encabezado precompilado. El estándar es stdafx.h
  7. Haga clic en Aceptar

  8. Si no tiene stdafx.h en sus archivos de encabezado, póngalo allí. Edítelo para incluir todos los encabezados que desea precompilar.

  9. Ponga un archivo llamado stdafx.cpp en su proyecto. Coloque #include "stdafx.h" en la parte superior y nada más.
  10. Haga clic derecho en stdafx.cpp en el Explorador de soluciones. Seleccione Propiedades y Todas las configuraciones nuevamente como en el paso 4 ...
  11. ... pero esta vez seleccione Crear encabezado precompilado (/ Yc). Esto solo se unirá al archivo stdafx.cpp.
  12. Coloque #include "stdafx.h" en la parte superior de todos sus archivos fuente.

Lucky 13. Cruza los dedos y presiona Construir.

Jive Dadson
fuente
58
No sabía que stdafx.cpp debería tener una configuración diferente. Gran respuesta.
experto el
55
Esta debería ser la respuesta aceptada, ya que al otro le faltan los pasos 10 y 11. ¡Gracias!
JBentley
2
Esta es una respuesta más básica que la mía. Los pasos 1-7 son necesarios para que PCH funcione, pero el mensaje de error de la pregunta indica que esos pasos ya se han realizado. OTOH, asume un solo stdafx.pcharchivo, mientras que el xxxxx.pchde la pregunta sugiere un problema más complejo (configuración de PCH múltiple).
MSalters
1
Esta respuesta realmente salvó el día. Gracias.
Matt Craig el
¡Gracias Señor! Volviendo a mis raíces de C / C ++ r para un nuevo proyecto y me siento un poco loco
Colby Africa
59

El uso de encabezado precompilado (pch) es un proceso de dos pasos.

En el paso uno, compila un archivo apéndice (en VS200x generalmente se llama stdafx.cpp. Se usan versiones más nuevas pch.cpp). Este archivo auxiliar indirectamente incluye solo los encabezados que desea precompilar. Por lo general, un encabezado pequeño (generalmente stdafx.ho pch.hpp) enumera encabezados estándar como <iostream>y <string>, y luego se incluye en el archivo apéndice. Compilar esto crea el archivo .pch.

En el paso 2, su código fuente real incluye el mismo encabezado pequeño del paso 1 que el primer encabezado. El compilador, cuando encuentra este encabezado especial, lee el archivo .pch correspondiente. Eso significa que no tiene que (re) compilar esos encabezados estándar cada vez.

En su caso, parece que el paso 1 falla. ¿El archivo de código auxiliar todavía está presente? En su caso, eso probablemente sería xxxxx.cpp. Debe ser un archivo compilado /Yc:xxxxx.pch, ya que es el indicador del compilador para indicar que es el paso 1 del proceso PCH. Si xxxxx.cppestá presente y es un archivo de código auxiliar, es probable que le falte la /Yc:opción del compilador.

MSalters
fuente
13
entonces probablemente le falta su / Yc: opción del compilador. Por cierto, la opción se encuentra en las páginas de propiedades del proyecto / Propiedades de configuración / C-C ++ / Encabezados precompilados
wip
22

Reparar:

  1. Asegúrese de tener xxxxx.cpp en su proyecto

  2. Compile xxxxx.cpp con el indicador / Yc ( Crear encabezado precompilado)
    (haga clic con el botón derecho en xxxxx.cpp -> propiedades -> Encabezados precompilados -> crear )

  3. Compile todos los demás archivos con el indicador / Yu ( Usar encabezado precompilado)
    (haga clic con el botón derecho en proyecto -> propiedades -> Encabezados precompilados -> usar )

franckspike
fuente
Esto me arregló. ¡Muchas gracias!
CharlesW
7
  1. Haga clic derecho en el proyecto y seleccione el elemento del menú de propiedades
  2. Ir a C / C ++ -> Encabezados precompilados
  3. Seleccione No usar encabezados precompilados
jpabess
fuente
Esto funcionó para mí. Había eliminado "stdafx.cpp", luego, cuando lo volví a agregar, este error no desaparecería hasta que apague los encabezados precompilados. El proyecto es pequeño de todos modos, por lo que no es que haga mucha diferencia en la velocidad.
Contango
3
4. SeleccioneCreate (/Yc) (para restaurar y luego usarlo nuevamente)
Bitterblue
2

Sí, se puede eliminar con las opciones / Yc como otros han señalado, pero lo más probable es que no necesite tocarlo para solucionarlo. ¿Por qué obtiene este error en primer lugar sin cambiar ninguna configuración? Es posible que haya "limpiado" el proyecto y luego intente compilar un solo archivo cpp. Obtendría este error en ese caso porque ahora falta el encabezado del precompilador. Simplemente construya todo el proyecto (incluso si no tiene éxito) y luego construya un solo archivo cpp y no obtendrá este error.

zar
fuente
2

En caso de que esto le ocurra en una compilación del servidor (AppCenter) y su uso de CocoaPods, asegúrese de que su Podfile esté registrado.

AppCenter solo ejecuta el comando "pod install" si encuentra un Pofile y NO encuentra la carpeta PODS en los archivos.

Hice registrar la carpeta, pero debido a que git ignora automáticamente los archivos .pch (compruebe que .gitignore para verificar esto), mi .pch no fue registrada.

Solucioné mi problema obligando a los archivos .pch a verificarlo, pero eliminar la carpeta PODS también debería funcionar, ya que Appcenter ejecutará el comando de instalación de pod en ese caso.

Esperemos que esto ayude a alguien.

Marco Leite
fuente
0

Si todo está bien, pero este error está presente, debe verificar la siguiente sección en el archivo ****. Vcxproj:

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

En mi caso, había un nombre incorrecto de una configuración: solo la primera palabra.

Sergey ArcTechno
fuente
0

Sé que este tema es muy antiguo, pero estaba lidiando con esto en VS2015 recientemente y lo que ayudó fue eliminar las carpetas de compilación y volver a compilarlo. Esto puede haber sucedido debido a intentar cerrar el programa o un programa que detiene / congela VS mientras se construye.

glover12
fuente
Sí, pero la pregunta original tenía que ver con VS2008, no VS2015. ¿Tiene alguna certeza de que esto resolvería el problema del OP?
T-Heron
Independientemente de la versión VS que sea, el problema aún ocurre en diferentes compilaciones. Simplemente intente eso y vea si funciona para cualquier persona con la que esté tratando.
glover12
0

Estaba buscando el archivo PCH de iOS que tenía el mismo problema, si llegó aquí como yo también, la solución que he encontrado es borrar los datos derivados; Cierre los simuladores, vaya a las preferencias de xCode -> ubicaciones -> vaya a la ruta del archivo de datos derivados, cierre xCode, elimine los archivos en la carpeta de datos derivados, vuelva a iniciar y saludos :)

Ahmed Awad
fuente
-1

Pruebe Build> Clean Solution, luego Build> Build Solution. Esto funciona para mi.

Nick Dong
fuente