Tengo un proyecto de MSVC++ que consiste en un archivo ejecutable, varias bibliotecas estáticas propias y algunas bibliotecas de terceros estáticas precompiladas. El exe usa enlaces incrementales para acelerar el tiempo de compilación.Exe realiza un enlace completo cuando la Biblioteca cambia, a pesar del enlace incremental
Cuando cambio un archivo .cpp dentro del proyecto ejecutable, compilar + vincular es muy rápido (< 10s).
Sin embargo, cuando cambio un archivo .cpp dentro de una de mis propias bibliotecas, el proyecto ejecutable parece estar haciendo un enlace completo contra cada biblioteca que utiliza.
Ya no estoy tan seguro de si es un enlace completo, pero de las advertencias de enlace "vc90.pdb not found", puedo decir que enlaza con algunas bibliotecas externas que no han cambiado en absoluto.
He aquí un ejemplo de la estructura del proyecto:
- bibliotecas precompilados de terceros
ExtLib1
,ExtLib2
yExtLib3
- Biblioteca propio
MyLib
, utilizando lib terceroExtLib1
- propia Exe
MyExe
, utilizandoMyLib
yExtLib1-3
Cambio de un archivo .cpp en MyLib
conduciría entonces a MyExe
estar vinculados a MyLib
, ExtLib1
, ExtLib2
y ExtLib3
, incluso si incremental Vinculación está encendida.
Un enlace completo demora alrededor de 5 minutos en mi proyecto, entonces pregunto: ¿Hay alguna forma de volver a vincular solo la biblioteca modificada?
Mis bibliotecas están compiladas con/Yu/Zi. Intenté deshabilitar los encabezados precompilados para la biblioteca (es decir,eliminando/Yu) pero no cambió mucho. Tal vez el enlazador está de hecho tratando de hacer un enlace incremental pero vincula casi cualquier cosa. Tendrá que investigar esto más mañana –