Verknüpfen mehrerer statisch .lib-Dateien in eine monolithische .lib-Datei mit VS2008 SP1 mit CMake 2.8.x
Bezug auf mit cmake zu link-Objekt-Dateien in lib.xxxx.eine Datei, aber nicht ganz das gleiche Ding habe ich gebaut, mehrere statische Bibliotheken auf Windows mit CMake 2.8.x mit VS2008 SP1. Gibt es eine Möglichkeit via CMake allein zu verknüpfen alle .obj-Dateien in alle diese vorhandenen statischen Bibliotheken in einem größeren monolithischen Bibliothek, vorzugsweise über die add_library
CMake-Funktion, oder andere ähnliche Konstrukt?
Ich denke, die Antwort ist "Nein", und so habe ich überlegt rolling meiner eigenen über einen benutzerdefinierten Befehl über die üblichen add_custom_command
+ add_custom_target
Ansatz, dass einfach Konstrukte, die Bibliothek manuell, indem Sie alle anderen Bibliotheken .obj-Dateien, die beim aufrufen LINK.EXE
. Aber ich sehe einige Probleme mit diesem Ansatz:
- Konnte ich nicht finden, ein CMake-variable, gibt den vollständig qualifizierten Pfad zu den
LINK.EXE
ausführbare Datei. Ich hätte dann irgendwie das ableiten der Pfad zuLINK.EXE
mit einem fragilen Heuristik: Es ist zerbrechlich in dem Sinne, dass verschiedene Versionen von Visual Studio finden können, dieLINK.EXE
Datei in verschiedenen Verzeichnissen, und ich bin benötigen diese arbeiten sowohl für 32-bit und 64-bit-Windows-compiler Bedingungen, und werden widerstandsfähig gegen upgrades zwischen VS2008 und zukünftige compiler Versionen. - Ich würde einen Weg finden, Sie zu finden Sie alle .obj-Dateien die statischen Bibliotheken, bei der Erstellung versus bei CMake Zeit, da bei CMake Zeit die .obj-Dateien natürlich nicht (immer) vorhanden ist. Aus Gründen der build-performance, die ich mir Wünsche, nicht zu greifen, zu extrahieren .obj-Dateien aus .lib-Dateien für den Willen, Sie zu addieren, um die
LINK.EXE
Befehl Linie, alsoFILE(GLOB...)
Konstrukt wäre meine beste zweite alternative in diesem Fall. - Kann es möglich sein, rufen Sie einfach
LINK.EXE
über:LINK.EXE /OUT:monolithic.lib lib1.lib lib2.lib ...
, aber vielleicht nicht alle .obj wird eingebunden werden (EDIT: ich habe bestätigt, dassLINK.EXE
weglässt manche .obj-Dateien auslib1.lib lib2.lib ...
ohne Diagnose-Meldungen zu erklären, warum, dieser Ansatz ist ein non-starter); die online-Dokumentation fürLINK.EXE
Unklarheiten zu diesem Punkt. Wer noch keine Erfahrung mit der VerwendungLINK.EXE
in dieser Art und Weise?
Dank,
Brent
P. S. ich weiss, wie ich eine DLL erstellen, mit CMake, aber ich habe ausdrücklich nicht wollen, zu greifen, zu erstellen einer DLL an diesem Punkt in der Zeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie eine statische Bibliothek "zusammengeführt" mit einem Pseudo-Quellcode-Datei, und fügen Sie Bibliotheken zusammengeführt werden, um die STATIC_LIBRARY_FLAGS, so dass Sie zusätzlichen input zu lib.exe.
Wäre das etwas wie:
ADD_LIBRARY(zusammengeführt STATISCHE dummy.c)
SET_TARGET_PROPERTIES(zusammengeführt EIGENSCHAFTEN
STATIC_LIBRARY_FLAGS "vollständiger\Pfad\zu\lib1.lib vollständiger\Pfad\zu\lib2.lib")
Dieser Ansatz ist in MySQL, es ist ein allgemeiner makro-hier verschmelzen statische Bibliotheken, die Werke überquerens-Plattform. Es kann hier gefunden werden http://www.mail-archive.com/[email protected]/msg28670/libutils.cmake