web-dev-qa-db-ja.com

cmake ..は何をしますか?

Box2Dプロジェクトソースを取得し、テストベッド部分をコンパイルしたいと考えています。プロジェクトフォルダーには次のようなフォルダーが含まれています:freeglu glui testbed(デモ)helloword(デモ)Box2DビルドCMakeFiles

すべての異なるフォルダーに多くのCMakeLists.txtがあります。必要なすべての場所にmakeファイルが作成されるように、これらすべてのファイルを作成する必要があると考えていました。私はこれを読んでいます(指示するために私はしたいのですが):

wget http://box2d.googlecode.com/files/Box2D_v2.2.1.Zip
unzip Box2D_v2.2.1.Zip
cd Box2D_v2.2.1/Build
cmake ..
make

Cmake ..は何をしますか?ビルドフォルダーにCMakeLists.txtはありません。

30
batman

cmakeはMakefileジェネレーターです。

_cmake [path]_を呼び出すときは、_[path]/CMakeLists.txt_の指示に従って現在のディレクトリMakefileを生成するを要求します。

通常、cmakeは動作中にいくつかのメッセージを出力します。エラーなしで完了したら、「make」と入力して、新しく作成したMakefileを実行できます。

CMakeLists.txtファイルは他のディレクトリを参照できますCMakeLists.txtサブディレクトリ内のファイルなので、通常はCMakeLists.txttopディレクトリで、他のディレクトリではありません。

空の「ビルド」ディレクトリを使用することは、「アウトオブソースビルド」と呼ばれる手法であり、生成されたすべてのファイル(.o、実行可能ファイル、Makefile、.anything)が別の「ビルド」ディレクトリに生成され、ソースファイル。すべてをクリーンアップする場合は、ビルドディレクトリのすべてのコンテンツを削除できます。

実際、cmakeに最上位のCMakeLists.txtの正しいパスを与える限り、「ビルド」ディレクトリを任意の場所に置くことができます。複数のビルドディレクトリを持つこともできます。同時に複数の異なるビルドが必要な場合(オプションが異なる、gccのバージョンが異なるなど)は、非常に便利です。

古いプログラムでは、Makefileも生成しますが、_./configure_を使用します(これはauto-toolsと呼ばれます。すでにそれに遭遇した可能性があります)。 cmakeは自動ツールの後継と見なされています。

45
Offirmo

cmake ..は、../CMakeLists.txtファイルを開始点として使用して、現在のディレクトリにメイクファイルを生成します。 makeコマンドは、この後に実行され、生成されたmakefileを入力として使用してプログラムをビルドします。これは、ソースコードを保持し、異なるフォルダーに結果をビルドするのに便利です。一般的な構文は次のとおりです。cmake source-dir(もちろん、他にも多くのスイッチがあります)。

6
Alex F

まあ、..は親フォルダの省略形なので、おそらくBox2D_v2.2.1で見つかったものすべてに作用します。

3
Rook