Actualmente estamos utilizando una sola herramienta de línea de comandos para construir nuestro producto tanto en Windows como en Linux.¿Cómo combino varios archivos PDB?
Si, funciona muy bien, lo que nos permite construir fuera de la fuente y con dependencias más finas que las permitidas por nuestro sistema de compilación anterior. Esto nos compra grandes capacidades incrementales y paralelas de construcción.
Para describir brevemente el proceso de construcción, tenemos la costumbre:
.cpp -- cl.exe --> .obj and .pdb
multiple .obj and .pdb -- cl.exe --> single .dll .lib .pdb
multiple .obj and .pdb -- cl.exe --> single .exe .pdb
El msvc C/C++ soporta adecuadamente.
Recientemente surgió la necesidad de crear algunas bibliotecas estáticas. Por lo que hemos reunido, el proceso de construir una biblioteca estática es:
multiple .cpp -- cl.exe --> multiple .obj and a single .pdb
multiple .obj -- lib.exe --> a single .lib
La única .pdb significa que cl.exe
únicamente debería ser ejecutado una vez por todas las fuentes .cpp. Esta ejecución única significa que no podemos paralelizar la compilación para esta biblioteca estática. Esto es realmente desafortunado
Investigamos un poco más y de acuerdo a la documentación (y las opciones de línea de comandos disponibles):
cl.exe
no sabe cómo construir bibliotecas estáticaslib.exe
no sabe cómo construir .pdb archivos
¿Alguien sabe una manera de combinar múltiples archivos PDB? ¿Estamos condenados a tener construcciones lentas para las bibliotecas estáticas? ¿Cómo trabajan herramientas como Incredibuild en torno a este problema?
Siempre puede poner su código en una unidad de estado sólido. Las compilaciones serán muy rápidas. –
Estoy en una unidad de estado sólido en mi libro de estilo. Ayuda, pero el enlace está vinculado a IO, la compilación está vinculada a la CPU. –