Verzeichnisorganisation eines CMake-Repositorys (C ++) mit mehreren Projekten

12

Ich möchte einige Ratschläge zur Organisation einer Reihe von verwandten, aber unabhängigen C ++ - Projekten, die in einem einzigen (Git-) Repository gespeichert sind. Die Projekte verwenden CMake.

Für ein vereinfachtes Beispiel stellen wir uns 2 Projekte A und B vor, wobei A von B abhängt. Die meisten Leute, die A entwickeln, erhalten B über das Verpackungssystem. Daher kompilieren sie nur A. Wir sollten Entwicklern jedoch erlauben, sowohl A als auch B selbst zu kompilieren (und zu installieren), separat oder zusammen.

Hier ist ein Vorschlag:

└── Repo1
    ├── CMakeLists.txt (1)
    ├── A
       ├── CMakeLists.txt (2)
       ├── include
          ├── aaa.h
          ├── aaaa.h
          └── CMakeLists.txt (3)
       └── src
           ├── aaa.cpp
           ├── aaaa.cpp
           └── CMakeLists.txt (4)
    ├── B
       ├── CMakeLists.txt (2)
       ├── include
          ├── bbb.h
          ├── bbbb.h
          └── CMakeLists.txt (3)
       └── src
           ├── bbb.cpp
           ├── bbbb.cpp
           └── CMakeLists.txt (4)
    └── test
        ├── CMakeLists.txt (5)
        └── testaaaa.cpp

(1) Definieren Sie die allgemeinen cmake-Variablen für alle Projekte (falls vorhanden) und schließen Sie die Unterverzeichnisse ein. (2) Definiert das Projekt selbst und die erforderlichen cmake-Variablen des Projekts. (3) Definiert die zu installierenden Header und die für die Kompilierung erforderlichen Header. (4) Konfiguriert die Bibliothek und die Binärdateien. (5) Konfiguriert die ausführbaren Testdateien und Testfälle.

Soweit ich weiß, sollte jedes Projekt eine XXXConfig.cmake-Datei erstellen und in / usr / local / share / cmake installieren. Das Schreiben dieser Dateien scheint beim Lesen der Dokumentation von CMake recht kompliziert zu sein.

Was denkst du ? Ist die Struktur sinnvoll?

Haben Sie zufällig ein funktionierendes Beispiel für eine solche Reihe von Projekten?

Barth
quelle
Ich denke, Sie könnten hier überfordert sein - wir haben gerade cmake für eine Anwendung mit einem abhängigen Bibliotheksprojekt eingeführt und sind bisher mit einer CMakeLists.txtDatei pro Projekt zufrieden : A/CMakeLists.txt(die App) enthält B/CMakeLists.txt(die Bibliothek) using add_subdirectory(...).
SSC

Antworten:

12

Nach einigem Lesen und Testen habe ich ein grundlegendes Demo-C ++ - Projekt erstellt, das die Verwendung von CMake, CTest + boost.test, CPack und Doxygen demonstriert und mehr oder weniger die Organisation verwendet, die ich in meiner Frage erwähnt habe.

Das Projekt zeigt, wie man Unterprojektabhängigkeiten herstellt, wie man das gesamte Repo kompiliert oder nur ein Unterprojekt, wie man es verpackt, wie man es testet und wie man Dokumentation erstellt.

Siehe hier: https://github.com/Barthelemy/CppProjectTemplate

Barth
quelle