1. ホーム
  2. cmake

[解決済み】CMakeは具体的にどのように動作するのですか?

2022-04-19 12:01:46

質問

これは自分だけのために聞いているのではありません。この質問が、私と同じように、このような小さな CMakeLists.txt ファイル

cmake_minimum_required (VERSION 2.6)
project(Tutorial)
add_executable(Tutorial tutorial.cpp)

といった小さな tutorial.cpp

int main() { return 0; } 

生成されるファイルは非常に多い

CMakeCache.txt  cmake_install.cmake  Makefile
CMakeLists.txt  tutorial.cpp

CMakeFiles フォルダーに多くのファイルとフォルダーがあります。

CMakeCCompiler.cmake               CMakeOutput.log    Makefile.cmake
cmake.check_cache                  CMakeSystem.cmake  progress.marks
CMakeCXXCompiler.cmake             CMakeTmp           TargetDirectories.txt
CMakeDetermineCompilerABI_C.bin    CompilerIdC        Tutorial.dir
CMakeDetermineCompilerABI_CXX.bin  CompilerIdCXX
CMakeDirectoryInformation.cmake    Makefile2

裏側で何が起こっているのか(つまり、なぜ多くのファイルを生成しなければならないのか、その目的は何か)を理解できないことが、CMakeを習得する上で最大の障害でした。

もし知っている人がいたら、後学のために説明していただけませんか?これらのファイルは何のためにあるのか、私が cmake . cmake はプロジェクトをビルドする前に、一体何を設定し、生成しているのでしょうか?

どのように解決するのですか?

秘密は、生成されたファイルが何をするのか理解する必要がないことです。

CMake はビルドシステムに多くの複雑さをもたらしますが、そのほとんどは、複雑なソフトウェアプロジェクトのビルドに使用した場合にのみ報われるものです。

良いニュースは、CMakeがこの厄介事の多くをあなたから遠ざける良い仕事をしているということです。使用方法 アウトオブソースのビルド で、生成されたファイルを見る必要すらありません。もし、これまでこれを行わなかったのであれば (これは、あなたが cmake . ), ご確認の上、お進みください。 . ビルドディレクトリとソースディレクトリを混在させることは、CMakeでは本当に苦痛であり、このシステムの本来の使い方ではありません。

一言で言えば の代わりに

cd <source_dir>
cmake .

常時使用

cd <build_dir_different_from_source_dir>
cmake <source_dir>

私は通常、空のサブフォルダを使用します build ソースディレクトリの中にあるビルドディレクトリです。

CMakeが生成する関連ファイルの概要を簡単に説明します。

  • プロジェクトファイル/Makefile - 実際に興味があること 選択したジェネレータでプロジェクトをビルドするために必要なファイル。これは、UnixのMakefileからVisual Studioのソリューションまで、何でも可能です。
  • CMakeCache.txt - これは持続的なキー/値の文字列ストレージで、実行間の値をキャッシュするために使用されます。ここに格納される値は、ライブラリの依存関係やオプションのコンポーネントをビルドするかどうかのパスです。変数の一覧は、ほとんど次のコマンドを実行したときのものと同じです。 ccmake または cmake-gui . これは時々見ておくと便利ですが、できればどの値も前述のツールを使って変更することをお勧めします。
  • 生成されたファイル - これは、自動生成されたソースファイルから、ビルドしたプロジェクトを他の CMake プロジェクトと再統合するのに役立つエクスポートマクロまで、何でもありです。これらのほとんどは必要に応じて生成されるもので、ご質問のような単純なプロジェクトでは表示されません。
  • その他 は、ビルドシステムを満足させるためのほとんどノイズです。特に、私は CMakeFiles サブディレクトリを作成します。

一般的に、CMake が生成してくれるファイルはいじらない方が良いでしょう。すべての問題は CMakeLists.txt を何らかの方法で実行します。その結果、期待通りにプロジェクトがビルドされれば、おそらく大丈夫でしょう。CMake が最初にあなたを救おうとしていたことなので、細かいことはあまり気にしないでください。