instalar compilar compilador c++ visual-c++ compilation

c++ - compilar - instalar mingw



¿Cómo se reduce el tiempo de compilación y el tiempo de vinculación para proyectos de Visual C++(C++ nativo)? (12)

Con Visual C ++, hay un método, algunos se refieren a Unity, que mejora significativamente el tiempo de enlace al reducir el número de módulos de objetos.

Esto implica concatenar el código C ++, generalmente en grupos por biblioteca. Esto, por supuesto, hace que la edición del código sea mucho más difícil, y te encontrarás con colisiones de espacios de nombres a menos que los uses bien. Le impide utilizar "using namespace foo";

Varios equipos de nuestra compañía tienen sistemas elaborados para tomar los archivos normales de C ++ y concatenarlos en tiempo de compilación como un paso de compilación. La reducción en los tiempos de enlace puede ser enorme.

¿Cómo se reduce el tiempo de compilación y el tiempo de vinculación para los proyectos de VC ++ (C ++ nativo)?

Especifique si cada sugerencia se aplica a la depuración, versión o ambas.


Estas soluciones se aplican tanto a la depuración como a la versión, y se centran en una base de código que ya es grande y engorrosa.

Las declaraciones a futuro son una solución común.

La construcción distribuida, como con Incredibuild, es una victoria.

Empujar el código de los encabezados hacia abajo en los archivos fuente puede funcionar. Las clases pequeñas, las constantes, las enumeraciones, etc. podrían comenzar en un archivo de encabezado simplemente porque podrían haberse utilizado en varias unidades de compilación, pero en realidad solo se usan en una, y podrían trasladarse al archivo cpp.

Una solución que no he leído pero he usado es dividir encabezados grandes. Si tienes un puñado de encabezados muy grandes, échales un vistazo. Pueden contener información relacionada, y también pueden depender de muchos otros encabezados. Tome los elementos que no tienen dependencias en otros archivos ... estructuras simples, constantes, enums y declaraciones hacia adelante y the_world.h de the_world.h a the_world_defs.h . Ahora puede encontrar que muchos de sus archivos de origen ahora pueden incluir únicamente the_world_defs.h y evitar incluir toda esa sobrecarga.

Visual Studio también tiene una opción "Mostrar incluye" que puede darle una idea de qué archivos de origen incluyen muchos encabezados y qué archivos de encabezado se incluyen con mayor frecuencia.

Para las inclusiones muy comunes, considere colocarlas en un encabezado precompilado.


La pregunta sobre la velocidad de compilación es lo suficientemente interesante como para que Stroustrup lo tenga en sus FAQ .


Nuestras máquinas de desarrollo son todas de cuatro núcleos y utilizamos Visual Studio 2008 para la compilación paralela. No estoy seguro de si todas las ediciones de VS pueden hacer esto.

Tenemos un archivo de solución con aproximadamente 168 proyectos individuales, y la compilación de esta manera lleva unos 25 minutos en nuestras máquinas de cuatro núcleos, en comparación con aproximadamente 90 minutos en las computadoras portátiles de un solo núcleo que ofrecemos a los estudiantes de verano. No son máquinas exactamente comparables pero tienes la idea :)


Otra técnica útil es blobbing. Creo que es algo similar a lo que describió Matt Shaw.

En pocas palabras, solo crea un archivo cpp en el que incluye otros archivos cpp. Puede tener dos configuraciones de proyecto diferentes, una ordinaria y una blob. Por supuesto, blobbing pone algunas restricciones en su código, por ejemplo, los nombres de clase en espacios de nombres no nombrados pueden entrar en conflicto.

Una técnica para evitar la recompilación de todo el código en un blob (como lo mencionó David Rodríguez) cuando se cambia un archivo cpp es tener el blob de "trabajo" que se crea a partir de archivos modificados recientemente y otros blobs comunes.

Utilizamos blobs en el trabajo la mayor parte del tiempo, y reduce el tiempo de compilación del proyecto, especialmente el tiempo de enlace.


Puede sonarle obvio, pero tratamos de usar declaraciones avanzadas tanto como sea posible, incluso si se requiere escribir nombres largos de espacios de nombres en los que el / los tipo / s se encuentran:

// Forward declaration stuff namespace plotter { namespace logic { class Plotter; } } // Real stuff namespace plotter { namespace samples { class Window { logic::Plotter * mPlotter; // ... }; } }

Reduce en gran medida el tiempo para compilar también en otros compiladores. De hecho, se aplica a todas las configuraciones :)


Si tiene encabezados complejos grandes que deben ser incluidos por la mayoría de los archivos .cpp en su proceso de compilación, y que no se modifican con frecuencia, puede precompilarlos. En un proyecto de Visual C ++ con una configuración típica, esto es simplemente una cuestión de incluirlos en stdafx.h. Esta característica tiene sus detractores, pero las bibliotecas que hacen un uso completo de las plantillas tienden a tener muchas cosas en los encabezados, y los encabezados precompilados son la forma más sencilla de acelerar las construcciones en ese caso.




Use el patrón de mango / cuerpo (también conocido como "pimpl", "adaptador", "decorador", "puente" o "envoltura"). Al aislar la implementación de sus clases en sus archivos .cpp, solo necesitan compilarse una vez. La mayoría de los cambios no requieren cambios en el archivo de encabezado, por lo que significa que puede realizar cambios bastante extensos y solo se necesita volver a compilar un archivo. Esto también fomenta la refactorización y la escritura de comentarios y pruebas unitarias ya que el tiempo de compilación se reduce. Además, separa automáticamente las preocupaciones de la interfaz y la implementación para que la interfaz de su código se simplifique.



Tiempo de compilación:
Si tiene IncrediBuild, el tiempo de compilación no será un problema. Si no tienes un IncrediBuild, prueba el método "build unitario". Combina múltiples archivos cpp en un único archivo cpp para reducir todo el tiempo de compilación.
Tiempo de enlace:
El método de "construcción unitaria" también contribuye a reducir el tiempo de enlace, pero no mucho. Sin embargo, puede comprobar si las "Optimizaciones globales completas" y "LTCG" están habilitadas, mientras que estos indicadores hacen que el programa sea rápido, HACEN que el enlace sea LENTO.
Intente desactivar la "Optimización global completa" y configure LTCG en "Predeterminado", el tiempo de enlace podría reducirse en 5/6.
(LTCG significa Link Time Code Generation)