Organizzazione della directory di un repository CMake (C ++) contenente diversi progetti

12

Vorrei alcuni consigli sull'organizzazione di una serie di progetti C ++ correlati ma indipendenti memorizzati in un singolo repository (git). I progetti utilizzano CMake.

Per un esempio semplificato immaginiamo 2 progetti A e B, A in base a B. La maggior parte delle persone che sviluppano A otterrà B tramite il sistema di pacchettizzazione. Pertanto compilano solo A. Tuttavia, dovremmo consentire agli sviluppatori di compilare sia A che B stessi (e installarlo), separatamente o insieme.

Ecco una proposta:

└── 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) Definire le variabili cmake comuni per tutti i progetti (se presenti) e include le sottodirectory. (2) Definisce il progetto stesso e le variabili cmake richieste dal progetto. (3) Definisce le intestazioni da installare e quelle necessarie per la compilazione. (4) Configura la libreria e i file binari. (5) Configura gli eseguibili di test e i casi di test.

A quanto ho capito, ogni progetto dovrebbe produrre un file XXXConfig.cmake e installarlo in / usr / local / share / cmake. Scrivere questi file sembra piuttosto complicato leggendo la documentazione di CMake.

Che ne pensi? La struttura ha senso?

Ti capita di avere un esempio funzionante di un tale insieme di progetti?

    
posta Barth 10.07.2015 - 16:41
fonte

1 risposta

12

Dopo un po 'di letture e test, ho realizzato un progetto demo C ++ di base che dimostra l'uso di CMake, CTest + boost.test, CPack e Doxygen e utilizzo più o meno l'organizzazione menzionata nella mia domanda.

Il progetto mostra come creare dipendenze di sottoprogetti, come compilare l'intero repository o solo un sottoprogetto, come impacchettare, come testare e come produrre documentazione.

Vedi qui: link

    
risposta data 12.08.2015 - 10:30
fonte