it-swarm.com.de

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

Ich hätte gerne einige Ratschläge zur Organisation einer Reihe verwandter, aber unabhängiger C++ - Projekte, die in einem einzigen (Git-) Repository gespeichert sind. Die Projekte verwenden CMake.

Als vereinfachtes Beispiel stellen wir uns 2 Projekte A und B vor, A abhängig von B. Die meisten Leute, die A entwickeln, erhalten B über das Verpackungssystem. Daher werden sie nur A kompilieren. 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 gemeinsamen 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. (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 ziemlich kompliziert zu sein.

Was denken Sie ? Ist die Struktur sinnvoll?

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

12
Barth

Nach einigen Lektüren und Tests 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 Teilprojektabhängigkeiten erstellt, wie man das gesamte Repo oder nur ein Teilprojekt kompiliert, wie man verpackt, testet und wie man Dokumentation erstellt.

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

12
Barth