2009-09-22 17 views
26

私は2つのプロジェクトがあり、どちらもCMakeを使用しています。今では、スタンドアロンプ​​ロジェクトとしてコンパイルする機能を維持しながら、プロジェクトの1つを別のライブラリの中にライブラリとして含めたいと考えています。cmakeプロジェクトを別のプロジェクトの中に埋め込む?

これまでに行ったことは次のとおりです。バージョン管理システムを使用して、親プロジェクトのサブディレクトリにある子プロジェクトのコピーを複製します。私は "add_subdirectory"を使って、子プロジェクトのCMakeLists.txtを親プロジェクトに含めました。そして、私は、子プロジェクトのいくつかのターゲットの名前を変更して、ターゲット間の名前の衝突を修正しました。

しかし、私が実行している問題は、子プロジェクトのさまざまな構成テストが実行されていないように見えることです。たとえば、子プロジェクトはFindThreadsモジュールを使用して、使用可能な同期プリミティブを判別します。親プロジェクトはスレッドの問題を認識していないため、これに関連するテストはありません。同様に、子プロジェクトには、ヘッダーなどのさまざまなテストがあり、親プロジェクトでは不要です。これらのテストは実行されていないように見え、これらのテストで定義されたシンボルはCMakeCache.txtファイルに追加されていません。

親プロジェクトのCMakeLists.txtにすべての子プロジェクトのテスト(主に親とは関係のないプラットフォーム固有の問題を処理する)をすべて持ち上げる必要はありません。

答えて

17

CMake 2.8には新しいExternal Projectモジュールが追加されました。このモジュールを使用して、別のCMakeプロジェクトのビルドを駆動するカスタムターゲットを作成できます。これに関する文書は弱いですが、あなたが望むことをするかもしれないようです。

あなたの親プロジェクトからExternalProject_Addを呼び出すことで、子プロジェクトのソースディレクトリを指し示すことになります(子プロジェクトをSVNまたはCVSからチェックすることもできます)。

+1

最近、私は外部プロジェクトと一緒に作業していました。 gitサブプロジェクトを使用しているので、ExternalProject_Addに外部プロジェクトをダウンロードしたりインストールしたりしないように指示する必要があります。これは、ダウンロードとインストールのコマンドを空の文字列に設定することによって行うことができます。 – Talin

関連する問題