Maison >développement back-end >C++ >Comment puis-je fusionner plusieurs bibliothèques statiques en une seule à l'aide de CMake ?

Comment puis-je fusionner plusieurs bibliothèques statiques en une seule à l'aide de CMake ?

DDD
DDDoriginal
2024-12-03 05:29:09512parcourir

How Can I Merge Multiple Static Libraries into One Using CMake?

Combiner des bibliothèques statiques en une seule avec CMake

Lorsque vous travaillez avec des projets dépendant de plusieurs bibliothèques statiques, la fusion de ces bibliothèques en une seule unité cohérente devient essentielle. CMake offre une solution robuste à ce défi, éliminant le besoin de maintenance des dépendances en aval.

Le problème

Les tentatives de combinaison de bibliothèques statiques utilisant directement target_link_libraries s'avèrent souvent infructueuses. Cependant, lorsque la bibliothèque combinée est utilisée comme dépendance pour un exécutable, CMake semble fusionner automatiquement les bibliothèques.

La solution

Une cible personnalisée peut être utilisée pour obtenir le résultat souhaité :

add_custom_target(combined
        COMMAND ar -x $<TARGET_FILE:a>
        COMMAND ar -x $<TARGET_FILE:b>
        COMMAND ar -qcs ${C_LIB} *.o
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        DEPENDS a b
        )

Cette cible extrait les fichiers objets des bibliothèques statiques individuelles et les combine dans une nouvelle bibliothèque statique.

Variante utilisant libtool

Si vous le souhaitez, l'utilitaire libtool peut être exploité dans le même but :

add_custom_target(combined
        COMMAND libtool -static -o ${C_LIB} $<TARGET_FILE:a> $<TARGET_FILE:b>
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        DEPENDS a b
        )

Conclusion

Bien qu'il puisse sembler qu'il devrait y avoir une approche plus simple, cette la cible personnalisée combine efficacement les bibliothèques statiques en une seule. Inutile de dire que cette technique simplifie la gestion des dépendances et garantit la livraison transparente des bibliothèques combinées aux consommateurs en aval.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn