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)
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 )
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!