2009-06-20 14 views
12

Tengo un proyecto de Visual Studio con aproximadamente 60 archivos fuente en C++. Puedo hacer una compilación y se completa sin errores. Pero si vuelvo a presionar F7 de nuevo, siempre vuelve a compilar aproximadamente 50 de los archivos fuente. No vuelve a compilar todos los archivos, lo cual es extraño.¿Por qué Visual Studio 2008 siempre está reconstruyendo todo mi proyecto?

Tengo 'Habilitar reconstrucción mínima' (/ Gm) establecido. ¿Alguna idea de por qué podría estar haciendo esto? Ninguno de los archivos tiene una fecha modificada en el futuro.

+1

¿Qué idioma? C++? DO#? VB? –

+0

Lo siento. En su mayoría es C++, con algo de C. – Rocketmagnet

+2

¿El problema desaparece si lo haces "Solución/Limpiar" y/o "Reconstruir todo"? ¿Desaparece si desactiva la opción "Habilitar reconstrucción mínima"? – ChrisW

Respuesta

8

¿Alguna de sus fechas de archivo está en el futuro? Esto puede ocurrir si cambió las zonas horarias o si cambió la hora del reloj del sistema. Las fechas en el futuro confundirán al IDE y forzarán una reconstrucción cada vez que se golpee F7 o F5.

+1

Ninguno de los archivos fuente está en el futuro. Revisé todos los archivos. – Rocketmagnet

+3

Este siempre ha sido el caso cuando esto me sucedió a mí. ¡Verifique las fechas de sus archivos, incluidos los encabezados de fuentes externas! – Mehrdad

+0

Me ha sucedido esto muchas veces y nunca fue el caso. –

5

Lo más probable es que se trate de dependencias.

considerar las siguientes posibilidades:

  • Si ha costumbre construir herramientas definidas para algunos de los archivos de la solución, asegúrese de que la propiedad de salida contiene el nombre de archivo correcto (s). Si la salida de la herramienta de compilación no se corresponde con la especificada en los nombres de los archivos de salida, el constructor reconstruirá ese archivo.

  • Si tiene eventos de compilación personalizados, verifique si la salida de esos eventos de compilación no afecta las dependencias de los archivos que se construirán.

  • Tuve problemas al intentar, en la etapa posterior a la compilación, copiar o mover algunos de los archivos de salida a una carpeta de compilación. Las operaciones de compilación posteriores que afectan a la marca de tiempo de los archivos de salida del proceso de compilación determinarán la reconstrucción cada vez.

+0

No tengo eventos de compilación personalizados. Todo es solo una compilación normal y un enlace, con bibliotecas. – Rocketmagnet

2

Una razón es que si la 'fecha de la última modificación' para uno de los archivo de origen se establece por alguna fecha en el futuro: se reconstruye, a continuación, el archivo de origen es aún más tarde que el ejecutable.

Este problema con las fechas puede ocurrir si el archivo fuente se encuentra en un directorio de una máquina remota (un recurso compartido de red) o incluso si la hora del equipo no está sincronizada con la fecha de la máquina que está ejecutando el servidor de su sistema de control de versiones de origen.

+0

Ninguno de los archivos fuente está en el futuro. Todos los archivos están en mi máquina local. – Rocketmagnet

3

Estoy teniendo el mismo problema, y ​​parece ser porque he desactivado la información de exploración. Propiedades-> C/C++ -> Buscar información-> Habilitar búsqueda de información-> Ninguna. La única solución que he encontrado es volver a encenderlo. Esto es para un proyecto de xbox 360, sin embargo, mis otros proyectos no tienen el problema.

3

Parece que este problema puede ser causado por muchas cosas, pero lo fija para mí era:

  1. Cierre Visual Studio
  2. borrar manualmente todos los binobj y carpetas (Clean no lo hace parece hacer el truco)
  3. Abrir la solución y ejecutar Limpio (no estoy seguro si esto es necesario, pero lo hice por si acaso ...)
  4. Edificio como normal

Nota: Esto fue para un programa de C# en Visual Studio 2010.

0

Lo que me causó síntomas similares fue: Tengo varios proyectos en una solución. Hubo archivos .cpp que fueron referenciados (y por lo tanto compilados) por> 1 proyectos. Lamentablemente, Visual Studio crea archivos .obj con un nombre muy simple: simplemente reemplaza ".cpp" por ".obj". Crear wrapper .cpp-s con diferentes nombres resolvió el problema.

0

Tenía algo similar. A pesar de que tuve eventos de compilación previa y posterior, no estaban causando el problema. Resultó que tenía varios proyectos en la cadena de referencias que tenían archivos de contenido marcados como "copiar siempre" en lugar de "copiar si es más nuevo", lo que significa que estos proyectos siempre se consideraron "desactualizados". Al cambiar todos estos para "copiar si es más reciente", los cambios en mi proyecto de prueba de unidad ya no obligan a una recompilación de todos los otros proyectos.

4

En mi caso de tal efecto (C++ a través de VS2005) estaba en la configuración de Release solamente, y el Studio dice en el resultado de compilación, que la opción del compilador/Gm se ignora si la opción/Zi no está configurada. Después de ajustar/Zi través

Propiedades de configuración -> C/C++ -> General -> Información de depuración Formato: Programa de Base de Datos (/ Zi),

que estaba bien. Pero, ¿no hay algo mal, cuando la configuración de la versión necesita algo sobre la depuración? Aún no está claro para mí!

+0

Este fue mi problema al final, debo haber desactivado accidentalmente la información de depuración (/ Zi) en mi proyecto de lanzamiento; aparentemente se usa durante el proceso de compilación para decidir qué se necesita construir. –

+0

Parece que debe tener una cadena vacía para el nombre de Base de datos de programa o debe generar la base de datos. Estableciendo la salida de compilación al nivel de diagnóstico, puede ver este mensaje: Se salta la tarea "Eliminar", debido a una condición falsa; ... ('ProgramDatabase'! = '' Y 'ProgramDatabase'! = 'OldStyle' y 'ARM \ Release \ vc110.pdb'! = '' Y! Existe (ARM \ Release \ vc110.pdb)). –

3

Después de un par de días de búsqueda en Google, terminé con una solución a mi problema.

Me encontré con este problema cuando moví mis proyectos a una nueva PC. Había revisado varias veces la fecha de creación de los archivos. Estas fechas estaban actualizadas, sin embargo las fechas de modificación estaban en el bast (algo extraño) incluso cuando cambié los archivos.

Una simple actualización de los archivos resolvió el problema.

1

Compruebe que su proyecto incluye cualquier archivo de encabezado .h que no exista en el disco. Siempre me sucede cuando elimino un archivo de encabezado. No incluyo realmente ningún lugar, pero me olvido de eliminarlo de mi navegador de soluciones en VS. Nota: los encabezados que faltan no producen errores durante la compilación (cuando no están #incluidos en ninguna parte).

1

Compruebe el de su proyecto Nombre de archivo de la base de datos configuración. Por alguna razón, si está configurado para el nombre de un directorio (como "$(IntDir)\"), a veces puede hacer que VS reforme su proyecto en todo momento, incluso si no está generando archivos PDB (es decir, el Formato de información de depuración está configurado en " Discapacitado").

Esto es un error en VS2008; Aún no lo he reproducido en VS2010, pero mis pruebas no han sido exhaustivas, por lo que no estoy seguro de que el comportamiento no esté presente en VS2010.

0

Al desactivar "reconstrucción mínima" (Propiedades de configuración> C/C++> Generación de código) lo solucioné por mí. El compilador incluso dejó una pista:

1> cl: advertencia de línea de comando D9007: '/ Gm' requiere '/ Zi o/ZI'; opción ignorada

Aunque debo señalar, el compilador no ignoró la opción como decía.

7

He resuelto el mismo problema.

En mi compilador se muestra una advertencia, esa opción/Zi es necesaria si se especifica/Gm.

/Gm habilita la "reconstrucción mínima", que requiere información de depuración en el archivo .pdb. Por lo tanto, si no desea utilizar .pdb, también desactive la reconstrucción mínima, resolvió un problema en mi caso.

4

Propiedades del proyecto -> "C/C++" -> "Archivos de salida" -> La opción "Nombre de archivo de la base de datos del programa" no debe estar vacía. Establezca esta opción seleccionando desde el cuadro desplegable. La opción se establecerá así: $ (IntDir) \ vc90.pdb. Y la línea ProgramDataBaseFileName = "" se eliminará del archivo vcproj.

Luego, los archivos * .cpp solo cambiados se volverán a compilar al compilar el proyecto o la solución.

0

En mi caso cambié la hora de datos del sistema a la fecha anterior, por lo que se está reconstruyendo cada vez debido a la marca de tiempo diferente de los archivos una vez cambiados a la hora actual, no se reconstruye cada vez.

0

Tenemos que aquí regularmente:

  • borrar todos los archivos intermedios y de salida con la mano. La opción de limpieza en vstudio a veces no es suficiente. Desde un nuevo comienzo haga la construcción completa. Si después de una compilación completa, vstudio aún desea recompilar ciertos archivos, podría estar relacionado con la próxima viñeta.
  • si en su vcxproj se hace referencia a un archivo de encabezado que no está en el disco, el proyecto también se vuelve a compilar. Es posible comprobar esto por algún rasgo oculto descrito en los blogs de MSDN o toque justo (es decir, haga clic en él para abrir) todos los archivos de cabecera en el detonador del proyecto y ver si uno no existe en el disco
0

tenía el mismo problema. Resuelto por: carpeta de salida -delete (obj, exe, todos los archivos) -run cygwin -CD carpeta del proyecto -run "toque *", que archivos vuelva modificar la fecha/hora -build y disfrutar problema fijo

0

Hay un problema similar con la reconstrucción del proyecto. Visual Studio no vuelve a compilar pero vuelve a vincular un proyecto cada vez que se pulsa F7.

La reparación es simple. Intente abrir en Editor todos los archivos incluidos en el proyecto (desde el Explorador de soluciones haga doble clic en cada archivo) y elimine de la solución los archivos que no existen.

Cuestiones relacionadas