Organisasi direktori repositori CMake (C ++) yang berisi beberapa proyek

12

Saya ingin beberapa saran pada organisasi satu set proyek C ++ terkait tetapi independen yang disimpan dalam repositori (git) tunggal. Proyek menggunakan CMake.

Sebagai contoh sederhana, kita bayangkan 2 proyek A dan B, A tergantung pada B. Kebanyakan orang yang mengembangkan A akan mendapatkan B melalui sistem pengemasan. Dengan demikian mereka hanya akan mengkompilasi A. Namun, kami harus mengizinkan pengembang untuk mengkompilasi A dan B sendiri (dan menginstalnya), secara terpisah atau bersama-sama.

Berikut ini sebuah proposal:

└── 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) Tentukan variabel cmake umum untuk semua proyek (jika ada) dan sertakan subdirektori. (2) Menentukan proyek itu sendiri dan variabel cmake yang diperlukan proyek. (3) Menentukan header untuk diinstal dan yang diperlukan untuk kompilasi. (4) Mengkonfigurasi perpustakaan dan binari. (5) Mengkonfigurasi executable uji dan kasus uji.

Seperti yang saya pahami, setiap proyek harus menghasilkan file XXXConfig.cmake dan menginstalnya di / usr / local / share / cmake. Menulis file-file ini sepertinya cukup rumit ketika membaca dokumentasi CMake.

Bagaimana menurut anda ? Apakah strukturnya masuk akal?

Apakah Anda memiliki contoh kerja dari serangkaian proyek seperti itu?

Barth
sumber
Saya pikir Anda mungkin melakukan overshooting di sini - kami baru saja memperkenalkan cmake untuk satu aplikasi dengan satu proyek perpustakaan tanggungan dan sejauh ini senang dengan satu CMakeLists.txtfile per proyek: A/CMakeLists.txt(aplikasi) termasuk B/CMakeLists.txt(perpustakaan) yang menggunakan add_subdirectory(...).
ssc

Jawaban:

12

Setelah beberapa membaca dan tes, saya telah membuat demo dasar proyek C ++ menunjukkan penggunaan CMake, CTest + boost.test, CPack dan Doxygen dan menggunakan lebih atau kurang organisasi yang saya sebutkan dalam pertanyaan saya.

Proyek menunjukkan bagaimana membuat dependensi sub-proyek, bagaimana mengkompilasi seluruh repo atau hanya sebuah sub-proyek, bagaimana mengemas, bagaimana menguji dan bagaimana menghasilkan dokumentasi.

Lihat di sini: https://github.com/Barthelemy/CppProjectTemplate

Barth
sumber