1

私はcmakeで頭がおかしくなりました。この回答の後、ディレクトリ内に多くのファイルがあり、ここにすべてをコピーするのは退屈な可能性があるため、簡単な例を作成してgithubに配置しようとしました。

私がやりたいことは、qt/opencv/opengl の実験を処理するための単純なフレームワークを構築することです。私が欲しいのは、これらのディレクトリを含むリポジトリです。

 root*
   |-apps
   |---test1*
   |
   |-build
   |-cmake*
   |
   |-modules
   |---foo*

(* 署名されたディレクトリは、CmakeLists.txt や FindXXModule.cmake などのいくつかの cmake ファイルを含むディレクトリです)

モジュールでは、モジュールを記述できます (たとえば、顔認識用のモジュール、opengl で赤い立方体を描画するためのモジュール、個人用の qt ウィジェット拡張を含むモジュール)。

アプリケーションを作成し、いくつかのモジュールをリンクする簡単な方法が必要です。そのために、FindXXModule.cmake を配置する cmake ディレクトリを作成し、アプリで次のように言うことを考えましたfind_package(XXModule)

今のところ、このリポジトリをインストールすることは気にせず、ツリー構造はこれでなければならないことに注意してください(したがって、apps/test2 にいる場合は、cmake ディレクトリを as../../cmakeまたはモジュールディレクトリを参照できることがわかっています../../modules)

test1モジュールを使用するという名前のアプリで小さな例を書き、それをgithub リポジトリfooに入れました。

今のところtest1、cmake 呼び出しcmake path_to_test1_CmakeLists.txtでアプリケーションをコンパイルでき、満足しています。しかし、起動しようとしても、ファイルが 2 回読み取らcmake path_to_root_CmakeLists.txtれるため機能しません(2 回読み取らないためにいくつかを使用できませんでした)。Findfoo.cmakeif

次に、test1 cmake を実行すると、cmake キャッシュなどを含む foo ディレクトリが作成されroot/cmakeますが、必要ありません。cmakeが生成しなければならないすべてのファイルがroot/buildディレクトリにあることを望みます。

だから、それらは私の2つの質問です:

  • すべてのアプリをビルドできる CmakeLists.txt を作成する方法と、modules ディレクトリに書き込む今後のすべてのテスト
  • 単一のアプリの cmake を起動すると、cmake ディレクトリにファイルが作成されることを回避するにはどうすればよいですか。

私の英語とcmakeの仕組みについての私の考えが良くない場合は申し訳ありません..明確であることを願っています.

編集:

もう一つ。Findfoo.cmake には悪いハックがあります: test1 から cmake を呼び出すときに、modules/foo 内に実際の CMakeLists.txt を追加するには、ツリーにないサブディレクトリを追加する必要があります..おそらく、この種のハックは全体の構造を見直して削除..

4

1 に答える 1

0

あなたが言うように、ディレクトリ構造全体をソース管理に入れたいと思っています。これは、これらのフォルダー構造が、チェックアウトを行うすべての場所で同じであることを意味します。では、foo ディレクトリへの相対パスがあるのに、なぜ Findfoo.cmake を作成するのでしょうか?

すべてのサブディレクトリを追加するルートに CMakelists.txt ファイルを配置することをお勧めします。CMake によって生成されたファイルと元のファイルとの間の混乱を避けるために、./build (または ../build) というフォルダーを作成し、ルート ディレクトリを最初の引数としてそのディレクトリで CMake を実行する必要があります。これにより、CMake で生成されたすべてのファイルが ./build ディレクトリに作成され、簡単にクリーンアップできるようになります。この作業方法はアウトオブソース ビルドと呼ばれ、この方法で cmake を使用することを強くお勧めします。例については、この質問を参照してください。

于 2013-06-24T06:49:06.040 に答える