Maison  >  Article  >  développement back-end  >  Comment gérer efficacement les dépendances dans CMake : un guide des dépendances locales, des cibles de bibliothèque et de la structure du projet ?

Comment gérer efficacement les dépendances dans CMake : un guide des dépendances locales, des cibles de bibliothèque et de la structure du projet ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-05 05:26:02502parcourir

How to Effectively Manage Dependencies in CMake: A Guide to Local Dependencies, Library Targets, and Project Structure?

Gestion des dépendances dans CMake : source, bibliothèque et CMakeLists.txt

Dans CMake, gestion des dépendances entre fichiers sources, bibliothèques et CMakeLists .txt garantit un projet bien structuré et efficace. Cet article explore les stratégies permettant de gérer efficacement les dépendances dans un projet complexe impliquant plusieurs bibliothèques et exécutables.

Dépendances locales : un avantage

La configuration de dépendances locales simplifie la gestion des dépendances en spécifiant dépendances aux niveaux source et lien dans le fichier CMakeLists.txt de chaque sous-répertoire. Cette approche fournit une hiérarchie claire et évite les ballonnements inutiles en excluant les dépendances non pertinentes.

Exemple de structure de projet et CMakeLists.txt

Considérez un projet avec des bibliothèques interconnectées et un exécutable :

Lib
  - LibA
    - CMakeLists.txt
    - Src
      - a.cc
    - Inc
      - a.h
  - LibB
    - CMakeLists.txt
    - Src
      - b.cc
    - Inc
      - b.h
  - LibC
    - CMakeLists.txt
    - Src
      - c.cc
    - Inc
      - c.h

App1
  - CMakeLists.txt
  - Src
    - main.cc

Bibliothèque CMakeLists.txt (LibA, LibB, LibC)

include_directories(Inc ../LibC/Inc)
add_subdirectory(../LibC LibC)
add_library(LibA Src/a.cc Inc/a.h)
target_link_libraries(LibA LibC)

include_directories(Inc)
add_library(LibB Src/b.cc Inc/b.h)

include_directories(Inc ../LibB/Inc)
add_subdirectory(../LibB LibB)
add_library(LibC Src/c.cc Inc/c.h)
target_link_libraries(LibC LibB)

App1 CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(App1 CXX)

file(WRITE "Src/main.cc" "#include \"a.h\"\n#include \"b.h\"\nint main()\n{\na();\nb();\nreturn 0;\n}")
...
include_directories(../Lib/LibA/Inc ../Lib/LibB/Inc)
add_subdirectory(../Lib/LibA LibA)
add_subdirectory(../Lib/LibB LibB)
add_executable(App1 Src/main.cc)
target_link_libraries(App1 LibA LibB)

Graphique des dépendances de la bibliothèque

Le graphe des dépendances pour ce projet : App1 -> LibA -> LibC -> LibB App1 -> LibB

Stratégies de gestion de plusieurs dépendances

Plusieurs approches existent pour gérer plusieurs dépendances :

  1. Construire des bibliothèques dans le même projet :
    Cette approche consolide les bibliothèques et l'exécutable au sein du même projet, facilitant la résolution des dépendances.
  2. Créer des bibliothèques dans des projets séparés :
    Pour les bibliothèques statiques rarement modifiées , cette stratégie peut être préférée pour éviter d'encombrer le projet principal.

Bonnes pratiques

  • Créer des cibles de bibliothèque complètes incluant un en-tête et une bibliothèque chemins.
  • Utilisez les modificateurs PUBLIC/PRIVATE dans target_link_libraries pour contrôler la visibilité de l'inclusion d'en-tête.
  • Utilisez la commande find_package pour gérer les dépendances avec des bibliothèques externes prédéfinies.

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