Saltar al contenido

Compartir encabezados precompilados entre proyectos en Visual Studio

Hacemos una verificación completa cada reseña en nuestro sitio web con el objetivo de mostrarte siempre información veraz y actual.

Solución:

Sí, es posible y les puedo asegurar que el ahorro de tiempo es significativo. Cuando compilas tu PCH, tienes que copiar el .pdb y .idb archivos del proyecto que está creando el archivo PCH. En mi caso, tengo un proyecto simple de dos archivos que está creando un archivo PCH. El encabezado será su encabezado PCH y se le indicará a la fuente que cree el PCH en la configuración del proyecto; esto es similar a lo que haría normalmente en cualquier proyecto. Como mencionó, debe tener la misma configuración de compilación para cada configuración; de lo contrario, surgirá una discrepancia y el compilador se quejará.

Copiar los archivos mencionados anteriormente cada vez que hay una reconstrucción o cada vez que se vuelve a compilar el PCH será una molestia, por lo que lo automatizaremos. Para automatizar la copia, realice un evento de compilación previa donde los archivos mencionados anteriormente se copian en el directorio apropiado. Por ejemplo, si está compilando Debug y Release compilaciones de su PCH, copie los archivos de Debug de su proyecto PCH a su proyecto dependiente Debug. Entonces, un comando de copia se vería así

copiar PchPathDebug*.pdb Debug /-Y

Nota la /-Y al final. Después de la primera compilación, cada compilación posterior se compila de manera incremental, por lo tanto, si reemplaza los archivos nuevamente, Visual Studio se quejará de los símbolos dañados. Si se corrompen, siempre puede realizar una reconstrucción, que copiará los archivos nuevamente (esta vez no los omitirá porque ya no existen; la limpieza elimina los archivos).

Espero que esto ayude. Me tomó bastante tiempo poder hacer esto, pero valió la pena. Tengo varios proyectos que dependen de un gran marco, y el PCH debe compilarse solo una vez. Todos los proyectos dependientes ahora se compilan muy rápidamente.

EDITAR: junto con varias otras personas, probé esto en VS2010 y VS2012 y parece funcionar correctamente.

Si bien esta es una pregunta antigua, quiero dar una nueva respuesta que funciona en Visual Studio 2017 y no implica ninguna copia. Única desventaja: Editar y continuar ya no funciona.

Básicamente, debe crear un nuevo proyecto para el encabezado precompilado y hacer que todos los demás proyectos dependan de él. Aquí esta lo que hice:

Paso a paso:

  1. Cree un nuevo proyecto dentro de su solución que incluya el encabezado (llamado pch.h de ahora en adelante) y un archivo cpp de una línea que incluya pch.h. El proyecto debe crear un static liberación Configure el nuevo proyecto para crear un encabezado precompilado. El archivo de salida debe ser accesible para todos los proyectos. para mí esto es relativo a IntDir, pero para la configuración predeterminada podría ser relativo a $(SolutionDir). El proyecto pch solo debe tener definiciones que todos los demás proyectos también tienen.

    configuración del proyecto pch

  2. Haga que todos los demás proyectos dependan de este nuevo proyecto. De lo contrario, el orden de compilación podría ser incorrecto.

    referencias de proyectos

  3. Configure todos los demás proyectos para usar pch.h. Vea cómo los parámetros del archivo de salida son los mismos que en el proyecto pch. Los directorios de inclusión adicionales también deben apuntar al directorio pch.h. Opcionalmente, puede forzar la inclusión del archivo pch en cada cpp (o incluirlo manualmente en la primera línea de cada archivo cpp).

    pchincluirincluir

    1. Configure todos los proyectos (incluido el proyecto pch) para usar el mismo archivo de símbolos del compilador (el archivo de símbolos del enlazador no se ve afectado). De nuevo, en mi ejemplo esto es OutDir pero en su solución esto puede variar. Tiene que apuntar al mismo archivo en el disco. El formato de información de depuración debe establecerse en C7 (consulte la captura de pantalla anterior); de lo contrario, Visual Studio no podrá compilar proyectos en paralelo.
      pdb

Espero no haber olvidado nada. Para mi solución (130k loc, 160 proyectos) esto llevó a un tiempo de compilación de ~2:30 minutos en lugar de ~3:30 minutos.

Parece que no es posible porque cada archivo fuente debe compilarse con el mismo PDB con el que se compiló PCH. Maldita sea.

Te mostramos comentarios y valoraciones

Si estás de acuerdo, tienes la libertad de dejar un escrito acerca de qué le añadirías a este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *