Pregunta

Para la mayor parte de mi trabajo de desarrollo con Visual C ++, estoy usando construye parcial, por ejemplo, presione F7 y sólo los archivos modificados en C ++ y sus dependencias obtener reconstruida, seguido de un enlace incrementales. Antes de pasar a una versión de prueba, tomo la precaución de hacer una reconstrucción completa, que dura unos 45 minutos en mi proyecto actual. He visto muchos mensajes y artículos que abogan por esta acción, pero es de extrañar que esto es necesario, y si es así, ¿por qué? ¿Afecta el EXE entregado o el AP asociado (que también se utiliza en la prueba)? ¿La función de software diferente desde una perspectiva de pruebas?

Para las versiones de lanzamiento, estoy usando VS2005, compilación incrementales y la vinculación, encabezados precompilados.

¿Fue útil?

Solución

No tiene a todos venir a través de este patrón de uso? Consigo errores de generación extraños, y antes incluso de investigar hago una reconstrucción completa, y el problema desaparece.

Esto por sí mismo me parece ser razón suficiente para hacer una reconstrucción completa antes de un lanzamiento.

Si usted estaría dispuesto a convertir una construcción incremental que se completa sin problemas a lo largo de la prueba, es una cuestión de gusto, creo.

Otros consejos

El sistema de construcción parcial funciona mediante la comprobación de las fechas de archivo de los archivos de origen en contra de los resultados de compilación. Por lo que puede romper si, por ejemplo, restaurar un archivo anterior de control de código fuente. El archivo anterior tendría una fecha de modificación anterior a la acumulación de producto, por lo que el producto no sería reconstruida. Para protegerse de estos errores, debe hacer una versión completa si se trata de una versión final. Mientras que usted está desarrollando sin embargo, incrementales compilaciones son, por supuesto, mucho más eficiente.

Editar:. Y, por supuesto, hacer una reconstrucción completa también le protege de posibles errores en el sistema de construcción incremental

El problema básico es que la compilación depende del entorno (opciones de línea de comandos, bibliotecas disponibles, y probablemente algo de magia Negro), y así dos compilaciones solamente tendrá el mismo resultado si se llevan a cabo en las mismas condiciones. Para la prueba y despliegue, que quiere asegurarse de que los ambientes están tan controlados como sea posible y que no está recibiendo comportamientos extravagantes debido al código extraño. Un buen ejemplo es si se actualiza una biblioteca de sistema, a continuación, volver a compilar la mitad de los ficheros - la mitad todavía están tratando de utilizar el código de edad, la mitad no lo son. En un mundo ideal, esto sería ya sea error de inmediato o no causa ningún problema, pero por desgracia, a veces ninguno de los suceder. Como resultado, haciendo una recopilación completa evita muchos de los problemas asociados a un proceso de construcción escalonada.

Sin duda lo recomiendo. He visto en varias ocasiones con una gran solución de Visual C ++ El corrector de dependencia no logran recoger un poco la dependencia de código cambiado. Cuando este cambio es un archivo de cabecera que afecta el tamaño de un objeto cosas muy extrañas pueden comenzar a ocurrir. Estoy seguro de que el verificador de dependencias ha mejorado en VS 2008, pero todavía no confía en él para una versión de lanzamiento.

La mayor razón de no enviar un binario de forma incremental relacionado es que algunas optimizaciones están desactivados. El enlazador dejará relleno entre las funciones (para que sea más fácil para reemplazarlos en el siguiente enlace incremental). Esto añade un poco de hinchazón al binario. Es posible que haya saltos adicionales, así, que cambia el patrón de acceso a la memoria y puede causar paginación adicional y / o errores de caché. Las versiones anteriores de funciones pueden continuar residiendo en el ejecutable a pesar de que nunca se les llama. Esto también conduce a la hinchazón binario y un rendimiento más lento. Y ciertamente no se puede utilizar la generación de código en tiempo de enlace con la vinculación incremental, por lo que se pierda más optimizaciones.

Si usted está dando una versión de depuración a un probador, entonces probablemente no es un gran problema. Pero sus versiones candidatas deben ser construidos a partir de cero en modo de lanzamiento, preferiblemente en una máquina de construcción dedicado con un ambiente controlado.

Visual Studio tiene algunos problemas con parcial (incremental) construye, (me encontré sobre todo la vinculación de errores) de vez en cuando, es muy útil tener una reconstrucción completa.

En caso de largos tiempos de compilación, hay dos soluciones:

  1. Utilice una herramienta de compilación en paralelo y tomar ventaja de su hardware núcleo (supuesta) múltiples.
  2. Use una máquina de construcción. Lo que más utilizo es una máquina de construcción separada, de un climatizador de configurar, que realiza reconstrucciones completos de vez en cuando. El lanzamiento "oficial" que proporciono al equipo de pruebas y, finalmente, para el cliente, siempre se toma de la máquina de construcción, no desde el entorno del desarrollador.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top