複数のプロジェクトを含むCMake(C ++)リポジトリのディレクトリ構成


12

単一の(git)リポジトリに保存されている一連の関連する独立したC ++プロジェクトの編成に関するアドバイスをお願いします。プロジェクトはCMakeを使用します。

簡単な例として、2つのプロジェクトAとB、Bに依存するAを想定します。Aを開発するほとんどの人は、パッケージングシステムを介してBを取得します。したがって、Aのみをコンパイルします。ただし、開発者がAとBの両方を個別にコンパイル(およびインストール)できるようにする必要があります。

これが提案です:

└── 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)すべてのプロジェクト(存在する場合)に共通のcmake変数を定義し、サブディレクトリを含めます。(2)プロジェクト自体とプロジェクトに必要なcmake変数を定義します。(3)インストールするヘッダーとコンパイルに必要なヘッダーを定義します。(4)ライブラリとバイナリを構成します。(5)テスト実行可能ファイルとテストケースを構成します。

私が理解しているように、各プロジェクトはXXXConfig.cmakeファイルを作成し、/ usr / local / share / cmakeにインストールする必要があります。CMakeのドキュメントを読むとき、これらのファイルを書くことは非常に複雑に思えます。

どう思いますか ?構造は理にかなっていますか?

このような一連のプロジェクトの実例がありますか?


ここでオーバーシュートしていると思います-1つのアプリケーションに1つの依存ライブラリライブラリプロジェクトでcmakeを導入しましたが、これまでのところ、CMakeLists.txtプロジェクトごとに1 つのファイルに満足しています:(A/CMakeLists.txtアプリ)にはB/CMakeLists.txt(ライブラリ)が含まれていadd_subdirectory(...)ます。
ssc

回答:


12

かなりの読書とテストの後、CMake、CTest + boost.test、CPack、Doxygenの使用を示す基本的なデモC ++プロジェクトを作成し、質問で言及した組織を多かれ少なかれ使用しました。

このプロジェクトは、サブプロジェクトの依存関係の作成方法、リポジトリ全体またはサブプロジェクトのみのコンパイル方法、パッケージ化方法、テスト方法、ドキュメントの作成方法を示しています。

こちらをご覧くださいhttps : //github.com/Barthelemy/CppProjectTemplate

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.