[解決済み】CMakeは具体的にどのように動作するのですか?
質問
これは自分だけのために聞いているのではありません。この質問が、私と同じように、このような小さな
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 が最初にあなたを救おうとしていたことなので、細かいことはあまり気にしないでください。
関連
-
[解決済み] CMake の add_definitions が動作しないようです。
-
[解決済み] CMakeでポータブルパラレルビルドを設定するには?
-
[解決済み] cmake --verbose=1` は冗長なcmake出力をしますが、`cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON` はそうならないのはなぜですか?
-
[解決済み] .cmakeファイルの目的は何ですか?
-
[解決済み] CMakeにおけるデバッグとリリースの比較
-
[解決済み] CMakeの出力をクリアするための'cmake clean'コマンドを探しています。
-
[解決済み】CMakeでC++ 11を有効にするには?
-
[解決済み】CMake:スクリプト内のアクセス可能なすべての変数を出力する
-
[解決済み】変数を設定・使用するCMakeの構文とは?
-
[解決済み】CMakeは具体的にどのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】CMakeでソースディレクトリからバイナリディレクトリにファイルをコピーする
-
[解決済み] CMakeは "make uninstall "をサポートしていますか?
-
[解決済み] CMake の add_definitions が動作しないようです。
-
[解決済み] CMakeでポータブルパラレルビルドを設定するには?
-
[解決済み] cmakeのincludeコマンドにおいて、ファイルとモジュールの違いは何ですか?
-
[解決済み] CMakeのオプション()をコマンドラインで設定する方法
-
[解決済み] CMakeの出力をクリアするための'cmake clean'コマンドを探しています。
-
[解決済み】CMakeをGNU Makeと一緒に使う:正確なコマンドを見るにはどうすればいい?
-
[解決済み】CMakeでGCCとClang/LLVMの切り替えを行う。
-
[解決済み】CMake:スクリプト内のアクセス可能なすべての変数を出力する