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

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

DDD
Libérer: 2024-12-01 15:48:10
original
453 Les gens l'ont consulté

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

Combiner plusieurs bibliothèques statiques en une seule avec CMake

Dans les scénarios de développement logiciel, il est courant d'avoir plusieurs bibliothèques statiques qui servent de dépendances pour un projet plus vaste. Pour rationaliser la distribution et réduire la complexité de la gestion des dépendances, il peut être souhaitable de combiner ces bibliothèques en une seule bibliothèque statique. CMake propose plusieurs approches pour atteindre cet objectif.

Une approche consiste à exploiter la commande target_link_libraries. Cependant, il est important de noter que cette commande ajoute simplement les bibliothèques spécifiées en tant que dépendances de lien, elle ne les combine pas en une seule bibliothèque.

Pour une solution plus transparente, envisagez d'utiliser une cible personnalisée avec l'ar commande. Voici un exemple de script CMake qui illustre cette approche :

cmake_minimum_required(VERSION 2.8.7)

add_library(b b.cpp b.h)
add_library(a a.cpp a.h)
add_executable(main main.cpp)

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
        )

add_library(c STATIC IMPORTED GLOBAL)
add_dependencies(c combined)

set_target_properties(c
        PROPERTIES
        IMPORTED_LOCATION ${C_LIB}
        )

target_link_libraries(main c)
Copier après la connexion

Ce script construit deux bibliothèques statiques (a et b) et un exécutable (principal) qui dépend d'une bibliothèque combinée (c). La cible personnalisée combinée utilise la commande ar pour extraire les fichiers objets des bibliothèques individuelles et les combiner dans c.a.

Vous pouvez également envisager d'utiliser le libtool d'Apple pour effectuer la combinaison :

add_custom_target(combined
        COMMAND libtool -static -o ${C_LIB} $<TARGET_FILE:a> $<TARGET_FILE:b>
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        DEPENDS a b
        )
Copier après la connexion

Alors que ces les approches de cible personnalisée fournissent un moyen de combiner plusieurs bibliothèques statiques, il convient de noter que la communauté CMake recherche toujours activement une solution plus élégante pour cette tâche courante.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal