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?
CMakeLists.txt
Datei pro Projekt zufrieden :A/CMakeLists.txt
(die App) enthältB/CMakeLists.txt
(die Bibliothek) usingadd_subdirectory(...)
.