web-dev-qa-db-ja.com

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

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

簡単な例として、2つのプロジェクトAとBを想像します。AはBに依存します。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のドキュメントを読むと、これらのファイルの書き込みはかなり複雑に見えます。

どう思いますか ?構造は意味がありますか?

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

12
Barth

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

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

ここを参照してください: https://github.com/Barthelemy/CppProjectTemplate

12
Barth