J'aimerais avoir des conseils sur l'organisation d'un ensemble de projets C++ associés mais indépendants stockés dans un seul référentiel (git). Les projets utilisent CMake.
Pour un exemple simplifié, nous imaginons 2 projets A et B, A selon B. La plupart des personnes développant A obtiendront B via le système d'emballage. Ainsi, ils ne compileront que A. Cependant, nous devrions permettre aux développeurs de compiler A et B eux-mêmes (et de les installer), séparément ou ensemble.
Voici une proposition:
└── 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) Définissez les variables cmake communes pour tous les projets (le cas échéant) et inclut les sous-répertoires. (2) Définit le projet lui-même et les variables cmake requises du projet. (3) Définit les en-têtes à installer et ceux requis pour la compilation. (4) Configure la bibliothèque et les binaires. (5) Configure les exécutables de test et les cas de test.
Si je comprends bien, chaque projet devrait produire un fichier XXXConfig.cmake et l'installer dans/usr/local/share/cmake. L'écriture de ces fichiers semble assez compliquée lors de la lecture de la documentation de CMake.
Qu'est-ce que tu penses ? La structure a-t-elle un sens?
Avez-vous un exemple concret d'un tel ensemble de projets?
Après pas mal de lecture et de tests, j'ai réalisé un projet de démonstration de base en C++ démontrant l'utilisation de CMake, CTest + boost.test, CPack et Doxygen et utilisant plus ou moins l'organisation que j'ai mentionnée dans ma question.
Le projet montre comment créer des dépendances de sous-projet, comment compiler le référentiel entier ou seulement un sous-projet, comment empaqueter, comment tester et comment produire de la documentation.