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

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

DDD
DDDoriginal
2024-12-07 00:20:10240parcourir

How Can I Combine Multiple Static Libraries into a Single Library Using CMake?

Combinaison de plusieurs bibliothèques statiques en une seule bibliothèque à l'aide de CMake

Lors de la création de projets qui s'appuient sur de nombreuses bibliothèques statiques, il peut être souhaitable de fusionner ces bibliothèques en une seule unité pour la publication. CMake dispose de méthodes spécifiques pour combiner directement les bibliothèques cibles, telles que target_link_libraries(), cependant, il peut ne pas effectuer l'action souhaitée dans tous les cas.

Approche cible personnalisée

Une approche consiste à créer une cible personnalisée qui manipule directement les bibliothèques statiques. En exécutant des commandes telles que ar ou libtool, il est possible d'extraire des fichiers objets de bibliothèques individuelles, puis de les recombiner en une seule archive. Ceci peut être réalisé grâce au code CMake suivant :

# Add the individual static libraries
add_library(a a.cpp a.h)
add_library(b b.cpp b.h)

# Create the combined library target
set(C_LIB ${CMAKE_BINARY_DIR}/libcombi.a)
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
)

# Import the combined library
add_library(c STATIC IMPORTED GLOBAL)
add_dependencies(c combined)
set_target_properties(c
    PROPERTIES
    IMPORTED_LOCATION ${C_LIB}
)

# Link the combined library to the executable
target_link_libraries(main c)

Cette méthode regroupe efficacement les fichiers objets des bibliothèques individuelles dans une seule archive, fournissant la bibliothèque combinée souhaitée.

Considérations alternatives

Bien que l'approche de cible personnalisée atteigne l'objectif, il peut y avoir d'autres approches à envisager. CMake fournit la fonction link_libraries(), qui a le potentiel de lier plusieurs bibliothèques en une seule sortie. De plus, une enquête sur l'utilisation de la fonction add_library() avec les indicateurs OBJECT ou INTERFACE peut offrir une solution.

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