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:

  1. 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 zu LINK.EXE mit einem fragilen Heuristik: Es ist zerbrechlich in dem Sinne, dass verschiedene Versionen von Visual Studio finden können, die LINK.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.
  2. 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, also FILE(GLOB...) Konstrukt wäre meine beste zweite alternative in diesem Fall.
  3. 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, dass LINK.EXE weglässt manche .obj-Dateien aus lib1.lib lib2.lib ... ohne Diagnose-Meldungen zu erklären, warum, dieser Ansatz ist ein non-starter); die online-Dokumentation für LINK.EXE Unklarheiten zu diesem Punkt. Wer noch keine Erfahrung mit der Verwendung LINK.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.

InformationsquelleAutor bgoodr | 2010-12-11
Schreibe einen Kommentar