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!