¿Alguien ha tenido éxito al conseguir que los encabezados precompilados funcionen con GCC? No he tenido suerte en mis intentos y no he visto muchos buenos ejemplos de cómo configurarlo. Probé cygwin gcc 3.4.4 y usé 4.0 en Ubuntu.
c++
gcc
precompiled-headers
Lee Baldwin
fuente
fuente

Respuestas:
Definitivamente he tenido éxito. Primero, utilicé el siguiente código:
Este fue solo un saludo a todo el mundo de Boost Xpressive (ver el enlace a continuación). Primero, compilé con el
-Hopción en gcc. Mostró una enorme lista de encabezados que utilizó. Luego, eché un vistazo a las banderas de compilación que estaba produciendo mi IDE (código :: bloques) y vi algo como esto:g++ -Wall -fexceptions -g -c main.cpp -o obj/Debug/main.oAsí que escribí un comando para compilar el archivo Xpressive.hpp con exactamente las mismas banderas:
sudo g++ -Wall -fexceptions -g /usr/local/include/boost/xpressive/xpressive.hppVolví a compilar el código original con el
-Hy obtuve este resultado:Los ! significa que el compilador pudo usar el encabezado precompilado. Una x significa que no pudo usarlo. El uso de las banderas del compilador adecuadas es crucial. Me quité la -H y realicé algunas pruebas de velocidad. El encabezado precompilado tuvo una mejora de 14 segundos a 11 segundos. No esta mal, pero tampoco grandioso.
Nota: Aquí está el enlace al ejemplo: http://www.boost.org/doc/libs/1_43_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.examples No pude hacer que funcione en el enviar.
Por cierto: estoy usando el siguiente g ++
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3fuente
-Winvalid-pchpara asegurarse de que el encabezado precompilado se esté usando correctamente? Notamos una gran mejora al usar pch para nuestras compilaciones de depuración, así que me pregunto si hay algún problema con su configuración.En primer lugar, consulte la documentación aquí .
Compila encabezados como cualquier otro archivo, pero coloca la salida dentro de un archivo con un sufijo
.gch.Entonces, por ejemplo, si precompila stdafx.h, tendrá un encabezado precompilado que se buscará automáticamente en
stdafx.h.gchcualquier momento que incluyastdafx.hEjemplo:
stdafx.h:
a.cpp:
Luego compila como:
Su compilación funcionará incluso si elimina stdafx.h después del paso 1.
fuente
El
-xespecificador para los encabezados precompilados de C ++ es-x c++-header, no-x c++. A continuación, se muestra un ejemplo de uso de PCH.pch.h:main.cpp:Genere el PCH así:
El
pch.h.gchdebe estar en el mismo directorio quepch.hpara poder ser utilizado, así que asegúrese de ejecutar el comando anterior desde el directorio dondepch.hestá.fuente
-c pch.h,-c pch.cpp¿ no ?He logrado que los encabezados precompilados funcionen bajo gcc una vez en el pasado, y recuerdo que también tuve problemas en ese momento. Lo que hay que recordar es que gcc ignorará el archivo (header.h.gch o similar) si no se cumplen ciertas condiciones, una lista de las cuales se puede encontrar en la página de documentación del encabezado precompilado de gcc .
En general, es más seguro que su sistema de compilación compile el archivo .gch como primer paso, con las mismas opciones de línea de comando y ejecutable que el resto de su fuente. Esto asegura que el archivo esté actualizado y que no haya diferencias sutiles.
Probablemente también sea una buena idea hacer que funcione primero con un ejemplo artificial, solo para eliminar la posibilidad de que sus problemas sean específicos del código fuente de su proyecto.
fuente
Llame a gcc de la misma manera que lo llama para su archivo fuente pero con un archivo de encabezado.
p.ej
esto genera un archivo llamado test.h.gch
Cada vez que gcc busca test.h busca primero test.h.gch y si lo encuentra lo usa automáticamente.
Puede encontrar más información en Encabezados precompilados de GCC
fuente
Asegurate que
-include your_header.hAsí es como precompilé y usé la
bits/stdc++.hcolección.Código
Luego localicé la biblioteca compilando mi archivo con -H y mirando la salida
donde vi
Así que hice un nuevo directorio
bitsdentro del actual y lo copiéstdc++.hdesde allí.Entonces corrí
que generó
bits/stdc++.gchNormalmente compilé mi código a través de
, pero tuve que modificar eso para
ya que solo resolvió
.gchpresentar en lugar de.hcon-include bits/stdc++.hEso fue clave para mí. Otra cosa a tener en cuenta es que debe compilar el*.harchivo de encabezado con casi los mismos parámetros que compila su*.cpp. Cuando no incluí-O3o-pthreadignoró el*.gchencabezado precompilado.Para comprobar si todo está correcto, puede medir la diferencia de tiempo comparando el resultado de
o corre
nuevamente y busque rutas de encabezado y si ahora obtiene
!antes de la ruta de la biblioteca, por ejemplofuente