La respuesta a la pregunta original es que el propósito de tener #pragma hdrstop en un archivo que no tiene/Yc o/Yu establecido es que se ignora y puede configurar una configuración de compilación sin encabezados precompilados y otros construya configuraciones que compilen con encabezados precompilados y no necesita cambiar el código o los encabezados que están incluidos en absoluto para hacerlo.
Más detalles ...
Las notas en MSDN dicen que "hdrstop pragma le da control adicional sobre los nombres de los archivos de precompilación y sobre la ubicación en la que se guarda el estado de compilación". que es cierto, pero no es especialmente obvio exactamente qué tan útil puede ser ...
En pocas palabras.
- Poniendo #pragma hdrstop en un archivo fuente que no está compilado con/Yc o/Yu no tiene ningún efecto.
- Si tiene/Yu configurado para el archivo, hdrstop le dice al compilador que deseche todo antes de la línea en la que aparece hdrstop e inserte el encabezado precompilado.
- Si/Yc se establece para el archivo, entonces hdrstop significa guardar todo el estado compilado para todo hasta la línea en la que aparece hdrstop como el encabezado precompilado.
El truco está en utilizar/Yc y/Yu sin el nombre de archivo de encabezado opcional; simplemente marque el botón de opción "usar" o "crear" y deje en blanco el cuadro de edición "a través del encabezado" (o edite el archivo del proyecto ...).
Así que tiene 1 archivo, posiblemente llamado PrecompiledHeader.cpp que incluye los encabezados que desea incluir en el encabezado precompilado y que tiene #pragma hdrstop al final de la lista de archivos incluidos. Este archivo ONE está compilado con/Yc.
Luego tiene todos sus otros archivos cpp con #pragma hdrstop después de incluir los archivos que están en su encabezado precompilado. Todos estos archivos están compilados con/Yu.
Esto da como resultado que PrecompiledHeader.cpp construya su (solo este) archivo pch único y todos los otros archivos que usen ese único archivo pch.
La ventaja de hacer esto es que NINGUNO de sus archivos debe incluir un archivo de encabezado de compilación precompilado "global", por lo que no es stdafx.h o lo que sea. Esto significa que puede configurar una configuración de compilación que construya SIN encabezados precompilados donde todas las líneas #pragma hdrstop simplemente se ignoran.
Esto es "bueno" porque significa que puede tener una única configuración de compilación "sin precompilación" que le permite desarrollar rápidamente (puede cambiar un solo encabezado y NO forzar al mundo a reconstruir) y otras configuraciones "normales" que SI usan encabezados precompilados.
Gracias. ¡Muchas gracias! ... Ahora, hmm ... * "Luego tiene todos sus otros archivos cpp con #pragma hdrstop después de los archivos de inclusión que están en su encabezado precompilado." * - ¿Esto significa que los otros archivos necesitan saber qué hay en el encabezado precompilado para que puedan dividir sus incluye a antes y después de la línea hdrstop? –
Funciona mejor si lo hace. Pero no es necesario. Obtendrá errores de compilación en sus construcciones precomp si tiene un archivo que está por encima del #pragma hdrstop que no está en su encabezado precompilado. A continuación, puede decidir si se usa lo suficiente como para garantizar que esté en el precomp o no. –