Relacionados con using cmake to link object files into lib.xxxx.a file, pero no del todo igual, he creado varias bibliotecas estáticas en Windows usando CMake 2.8.x usando VS2008 SP1 . ¿Hay una manera a través de CMake sola de volver a vincular todos los archivos .obj dentro de todas esas bibliotecas estáticas existentes en una biblioteca monolítica más grande, preferiblemente a través de la función CMake add_library
u otra construcción similar?Vinculación de múltiples archivos .lib estáticos en un archivo monolítico .lib utilizando VS2008 SP1 utilizando CMake 2.8.x
Creo que la respuesta es "no", y por eso he pensado rodar mi propia a través de un comando personalizado a través del habitual enfoque add_custom_command
+ add_custom_target
, que simplemente se construye la biblioteca manualmente, mediante el suministro de todas las otras bibliotecas .obj archivos al llamar al LINK.EXE
. Pero veo algunos problemas con este enfoque:
- no pude encontrar una variable CMake que indica la ruta completa a la
LINK.EXE
ejecutable. Entonces tendría que derivar de alguna manera el camino hacia laLINK.EXE
usando una heurística frágil: Es frágil en el sentido de que las diferentes versiones de Visual Studio pueden localizar el archivoLINK.EXE
en diferentes directorios, y yo estoy necesitando esto funcione tanto para 32 bits y Las condiciones del compilador de Windows de 64 bits, y ser resistente contra las actualizaciones entre VS2008 y futuras revisiones del compilador. - tendría que encontrar una manera de encontrar todos los archivos .obj de las otras bibliotecas estáticas, en tiempo de compilación frente en el momento CMake, ya que en el momento de CMake los archivos .obj, por supuesto, no lo hacen (siempre) existe. Por razones de rendimiento de construcción, deseo de no recurrir a la extracción de los archivos .obj de los archivos .lib por el bien de la adición a la línea de comandos
LINK.EXE
, por lo que un constructoFILE(GLOB...)
sería mi segundo mejor alternativa en este caso. - Puede ser posible llamar simplemente a través de
LINK.EXE
:LINK.EXE /OUT:monolithic.lib lib1.lib lib2.lib ...
, pero tal vez no todos los de .obj será incluido (EDIT: He confirmado queLINK.EXE
omite algunos archivos .obj delib1.lib lib2.lib ...
sin ningún mensaje de diagnóstico que explica por qué, por lo que este enfoque es un no iniciador); los documentos en línea paraLINK.EXE
no están claros en cuanto a ese punto. Alguien tiene alguna experiencia con el uso deLINK.EXE
de esa manera?
Gracias,
Brent
P. S., sé cómo crear un archivo DLL usando CMake, pero específicamente no quieren recurrir a la construcción de una DLL en este punto en el tiempo.
MERGE_STATIC_LIBS macro definida en http://www.mail-archive.com/[email protected]/msg28670/libutils.El enlace de cmake está muy cerca de lo que habría implementado. Una advertencia: ese enlace apunta a un archivo que es específico de mysql, por lo que debería ser generalizado para que sea factible en la práctica. – bgoodr
El libutils.cmake anterior de hecho no funciona de forma independiente, ya que hace referencia a merge_archives_unix.cmake.in configurable. Este archivo está disponible en http://www.mail-archive.com/[email protected]/msg28670/merge_archives_unix.cmake. en –