Birkaç proje içeren bir CMake (C ++) deposunun dizin organizasyonu


12

Tek bir (git) deposunda depolanan bir dizi ilişkili ama bağımsız C ++ projesinin organizasyonu hakkında bazı tavsiyelerde bulunmak istiyorum. Projeler CMake kullanıyor.

Basitleştirilmiş bir örnek için, B'ye bağlı olarak 2 proje A ve B, A düşünüyoruz. A geliştiren çoğu insan B sistemi üzerinden B alacak. Böylece sadece A derleyeceklerdir. Bununla birlikte, geliştiricilerin hem A hem de B'nin kendilerini ayrı ayrı veya birlikte derlemelerine (ve kurmasına) izin vermeliyiz.

İşte bir teklif:

└── 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) Tüm projeler (varsa) için ortak cmake değişkenlerini tanımlayın ve alt dizinleri içerir. (2) Projenin kendisini ve projenin gerekli olan cmake değişkenlerini tanımlar. (3) Kurulacak başlıkları ve derleme için gerekli olan başlıkları tanımlar. (4) Kütüphaneyi ve ikili dosyaları yapılandırır. (5) Test çalıştırılabilirlerini ve test senaryolarını yapılandırır.

Anladığım kadarıyla, her proje bir XXXConfig.cmake dosyası üretmeli ve / usr / local / share / cmake dosyasına kurmalıdır. CMake belgelerini okurken bu dosyaları yazmak oldukça karmaşık görünmektedir.

Ne düşünüyorsun ? Yapı mantıklı mı?

Böyle bir dizi projenin çalışan bir örneğine sahip misiniz?


Sanırım burada aşıyor olabilir - biz sadece bir dependee kütüphane projesi ile bir uygulama için cmake tanıttı ve şimdiye kadar CMakeLists.txtproje başına bir dosya ile mutlu : A/CMakeLists.txt(uygulama) içerir B/CMakeLists.txt(kütüphane) kullanarak add_subdirectory(...).
ssc

Yanıtlar:


12

Oldukça fazla okuma ve testten sonra, CMake, CTest + boost.test, CPack ve Doxygen'in kullanımını ve sorumda bahsettiğim organizasyonu az çok kullanarak temel bir demo C ++ projesi yaptım.

Proje, alt proje bağımlılıklarının nasıl yapılacağını, tüm repo veya sadece bir alt projenin nasıl derleneceğini, nasıl paketleneceğini, nasıl test edileceğini ve belgelerin nasıl üretileceğini gösterir.

Buraya bakın: https://github.com/Barthelemy/CppProjectTemplate

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.