Heim >Backend-Entwicklung >C++ >Wie man Abhängigkeiten in CMake effektiv verwaltet: Ein Leitfaden zu lokalen Abhängigkeiten, Bibliothekszielen und Projektstruktur?

Wie man Abhängigkeiten in CMake effektiv verwaltet: Ein Leitfaden zu lokalen Abhängigkeiten, Bibliothekszielen und Projektstruktur?

Barbara Streisand
Barbara StreisandOriginal
2024-11-05 05:26:02584Durchsuche

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

Abhängigkeitsverwaltung in CMake: Quelle, Bibliothek und CMakeLists.txt

Verwaltung von Abhängigkeiten zwischen Quelldateien, Bibliotheken und CMakeLists in CMake .txt sorgt für ein gut strukturiertes und effizientes Projekt. In diesem Artikel werden Strategien zur effektiven Handhabung von Abhängigkeiten in einem komplexen Projekt mit mehreren Bibliotheken und ausführbaren Dateien untersucht.

Lokale Abhängigkeiten: Ein Vorteil

Das Einrichten lokaler Abhängigkeiten vereinfacht die Abhängigkeitsverwaltung durch Angabe Abhängigkeiten auf Quell- und Linkebene innerhalb der CMakeLists.txt jedes Unterverzeichnisses. Dieser Ansatz sorgt für eine klare Hierarchie und vermeidet unnötiges Aufblähen, indem irrelevante Abhängigkeiten ausgeschlossen werden.

Beispielprojektstruktur und CMakeLists.txt

Stellen Sie sich ein Projekt mit miteinander verbundenen Bibliotheken und einer ausführbaren Datei vor:

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

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

Bibliotheksabhängigkeitsdiagramm

Das Abhängigkeitsdiagramm für dieses Projekt: App1 -> LibA -> LibC -> LibB App1 -> LibB

Strategien zum Verwalten mehrerer Abhängigkeiten

Es gibt mehrere Ansätze zum Verwalten mehrerer Abhängigkeiten:

  1. Erstellen Sie Bibliotheken im selben Projekt :
    Dieser Ansatz konsolidiert Bibliotheken und die ausführbare Datei innerhalb desselben Projekts und erleichtert so die Auflösung von Abhängigkeiten.
  2. Erstellen Sie Bibliotheken in separaten Projekten:
    Für statische, selten geänderte Bibliotheken , kann diese Strategie bevorzugt werden, um das Hauptprojekt nicht zu überladen.

Best Practices

  • Erstellen Sie voll funktionsfähige Bibliotheksziele, die Header und Bibliothek enthalten Pfade.
  • Verwenden Sie die Modifikatoren PUBLIC/PRIVATE in target_link_libraries, um die Sichtbarkeit der Header-Einbindung zu steuern.
  • Verwenden Sie den Befehl find_package, um Abhängigkeiten mit externen, vorgefertigten Bibliotheken zu verwalten.

Das obige ist der detaillierte Inhalt vonWie man Abhängigkeiten in CMake effektiv verwaltet: Ein Leitfaden zu lokalen Abhängigkeiten, Bibliothekszielen und Projektstruktur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn