20

cmake がビルド ジェネレーターであることは理解しています。これは、CMakeLists.txt からの指示に基づいて、適切なビルド (makefile、Visual Studio プロジェクトなど) を生成できることを意味します。しかし、関連していると思われる2つのことがわかりません。

  1. cmake-gui に「構成」と「生成」の 2 つのボタンがあるのはなぜですか? 私が読んだコマンド ライン チュートリアル (たとえば、これ) では、通常のプロセスは 1 つのcmakeコマンドで実行されました。

  2. cmakeの世界でキャッシュとは何ですか? AFAIKは、「構成」ボタンが押されたが「生成」ボタンが押されなかったときの状態です。しかし、なぜこれが役立つのでしょうか。「構成」を押した後にポップアップするすべての変数は何を意味しますか? なぜ私はそれらを編集することになっているのですか? CMakeLists.txt を介して行われる唯一の許可された構成ではありませんか?

ありがとう

4

1 に答える 1

24

CMake GUI の 2 つのボタンに反映されているように、CMake の実行には 2 つの段階があります。最初の段階は、ファイルが読み込まれる構成ステップCMakeLists.txtです。CMake は、この段階でプロジェクトの内部表現を構築します。その後、生成と呼ばれる第 2 段階が発生し、その内部表現に基づいてプロジェクト ファイルが書き出されます。

CMake GUI では、2 つのステージを個別に実行できます。configure ステップを実行すると、configure が最後に実行されてから、またはこれが最初の configure 実行である場合は CMake GUI が開始されてから、値が変更されたすべてのキャッシュ変数 (以下を参照) が GUI に表示されます。通常は、変数が赤く強調表示されなくなるまで構成ステージを再実行します。configure で赤字の変数がなくなったら、生成ボタンを押すと、ビルド ツールのネイティブ プロジェクト ファイルが作成され、ビルドなどを開始できます。

コマンド ラインcmakeツールでは、configure と generate の各ステップを個別に実行することはできません。むしろ、常に configure を実行してから生成します。

単純なプロジェクトの場合、構成と生成の違いはそれほど重要ではありません。簡単なチュートリアルでは、基本的なプロジェクトの配置の違いを理解せずに読み手が逃げてしまう可能性があるため、多くの場合、この 2 つをひとくくりにします。ただし、この区別に依存するいくつかの CMake 機能があります。特に、ジェネレータ式ビルドの特定の側面に関する決定が、構成時に完全に処理されるのではなく、生成時に遅延される生成時の機能です。この一例は、コンパイラ フラグ、一部の構成用にのみコンパイルされたソース ファイルなど、構成固有のコンテンツです。ビルド構成は、CMake の構成ステップで常に認識されるとは限りません (たとえば、Xcode と Visual Studio はマルチ構成ビルド ツールであるため、複数ある場合があり、ビルド時にユーザーによって選択されます)。生成ステップでは、ビルド タイプごとにジェネレータ式が処理され、結果は構成ごとに異なる場合があります。あなたもこの答えを見つけるかもしれませんこの特定の例に関して有益です。構成段階と生成段階の違いを利用する手法のより高度な例については、この投稿を参照してください。ただし、これは一般的な手法ではないことに注意してください。

キャッシュとは何かについての他の質問に関して、CMake は実行間の情報を変数キャッシュに記録します。実行の最後にCMakeCache.txt、ビルド ディレクトリで呼び出されるファイルを更新します。次にCMakeを実行すると、そのキャッシュを読み取ってさまざまなものを事前に入力するため、それらを再計算する必要がなくなり(ライブラリや他のパッケージの検索など)、オーバーライドするカスタムオプションを指定する必要がなくなります毎回。通常、手で編集することはありませんCMakeCache.txt(そうしてもかまいませんが)。むしろ、CMake GUI で必要な変数を変更してから、configure ステップを再実行できます (その後、generate を実行して、更新されたプロジェクト ファイルを作成することも忘れないでください)。-Dオプションを使用して、cmake コマンド ラインでキャッシュ変数を定義または変更することもできます。

于 2016-09-09T04:47:02.443 に答える