En relation avec using cmake to link object files into lib.xxxx.a file, mais pas tout à fait la même chose, j'ai construit plusieurs bibliothèques statiques sur Windows en utilisant CMake 2.8.x en utilisant VS2008 SP1 . Existe-t-il un moyen via CMake seul de relier tous les fichiers .obj dans toutes ces bibliothèques statiques existantes dans une bibliothèque monolithique plus grande, de préférence via la fonction CMake add_library
, ou autre construction similaire?Lier plusieurs fichiers .lib statiques dans un fichier .lib monolithique en utilisant VS2008 SP1 en utilisant CMake 2.8.x
Je pense que la réponse est « non », et donc je l'ai pensé à rouler ma propre via une commande personnalisée via l'approche habituelle add_custom_command
+ add_custom_target
, qui construit simplement la bibliothèque manuellement, en fournissant toutes les autres bibliothèques obj fichiers lors de l'appel LINK.EXE
. Mais je vois quelques problèmes avec cette approche:
- je ne pouvais pas trouver une variable CMake qui indique le chemin d'accès complet à l'exécutable
LINK.EXE
. Je devrais alors dériver le chemin versLINK.EXE
en utilisant une heuristique fragile: Il est fragile dans le sens où différentes versions de Visual Studio peuvent localiser le fichierLINK.EXE
dans différents répertoires, et j'ai besoin de cela pour fonctionner à la fois 32 bits et Conditions du compilateur Windows 64 bits, et être résilient contre les mises à niveau entre VS2008 et les futures révisions du compilateur. - Je dois trouver un moyen de trouver tous les fichiers OBJ des autres bibliothèques statiques, au moment de la construction contre au moment CMake, depuis lors CMake les fichiers OBJ bien sûr ne le font pas (toujours) existent. Pour des raisons de performance de construction, je ne souhaite pas avoir à extraire les fichiers .obj des fichiers .lib pour les ajouter à la ligne de commande
LINK.EXE
, donc une constructionFILE(GLOB...)
serait ma meilleure seconde alternative dans ce cas. - Il est possible d'appeler simplement
LINK.EXE
via:LINK.EXE /OUT:monolithic.lib lib1.lib lib2.lib ...
, mais peut-être pas tous les années .obj sera inclus (EDIT: Je confirme queLINK.EXE
omet certains fichiers OBJ delib1.lib lib2.lib ...
sans aucun message de diagnostic expliquant pourquoi, si cette approche est un non-démarreur); les documents en ligne pourLINK.EXE
ne sont pas claires quant à ce point. Quelqu'un at-il une expérience avec l'utilisation deLINK.EXE
de cette manière?
Merci,
Brent
post-scriptum, je sais comment créer une DLL en utilisant CMake, mais je ne veux pas spécifiquement d'avoir recours à la construction d'une DLL à ce moment.
Macro MERGE_STATIC_LIBS définie dans http://www.mail-archive.com/[email protected]/msg28670/libutils.Le lien cmake est très proche de ce que j'aurais mis en place. Un avertissement: Ce lien pointe vers un fichier qui est spécifique à mysql, il devrait donc être généralisé pour qu'il soit utilisable en pratique. – bgoodr
Le libutils.cmake ci-dessus ne fonctionne en effet pas de manière autonome, car il fait référence à merge_archives_unix.cmake.in configurable Ce fichier est disponible sur http://www.mail-archive.com/[email protected]/msg28670/merge_archives_unix.cmake. dans –