PROFESSINAL CMAKE : A PRACTICAL GUIDEとは
CMake参考書紹介(2022年時点)という記事で,この電子書籍を読んでクロスプラットフォームの環境構築ができたということが書いてありました.
これを受けて,試しに無料で公開されている部分を読んで要約してみたというものです.
この本は全部で7パートから構成されており,そのうち1パート目が無料で公開されています.
その無料で公開されている部分の各チャプターに何が書いてあるのかをメモの代わりに要約しています.
そのため,きちんとした内容は実際にこの公開されているデータを読みに行ってください.
その1
その1では,Chapter1とChapter2をまとめます.
ここでは,CMakeとは何であるかとプロジェクトファイルを作成する,ビルドするの大まかな流れについて説明しています.
Part1 : Getting Started
このパートは,CMakeの基本的な部分を紹介するパートである.
この本を読み終えたら,CMakeで開発,ビルド,テストをし,exeやlibを作れるようになる.
読むだけではつまらないので,は様々な実際に手を動かして学べるコンテンツを用意している.
Chapter1. Introduction
プログラミングに慣れた人でも,そうでなくても様々なコードをエンドユーザーが使える形にすることからは逃れられない.
そして,コンパイラ,リンカ,テストなど様々なものを学ばなければならない.
またそのコードを開発する際,様々なIDEでできる必要がある.
それらを管理する最適なツールがCMakeである.
Chapter2. Setting Up A Project
CMakeでは,CMakeLists.txtを使ってプロジェクトを管理する.
これはプロジェクトから独立しており,好きなテキストエディタで編集することができる.
CMakeの基本として,バイナリディレクトリとソースディレクトリがある.
そして,CMakeLists.txtはソースディレクトリで管理する.
CMakeでは,バイナリディレクトリを一般的な呼び方であるビルドディレクトリと呼ぶ.
またCMakeでは,CMakeCache.txtをビルドディレクトリで出力する.
CMakeCache.txtについて今は理解する必要なく,あとのチャプターで説明する.
そして,CMakeで作成されるビルドディレクトリに含まれるプロジェクトファイル(VS Project file等)はgitに管理されるべきではない.
そのため,開発者は,プロジェクトを始めるときビルドディレクトリをどこに置くかを考えなければならない.
2.1 In-source Builds
可能だが避けるべきなのは,ソースとビルドのディレクトリを同じにすることである.
これをIn-source Buildsと呼ぶ.
この方法は,ディレクトリを汚くするだけでなくビルドにより元のコードを上書きする可能性があったり,gitと相性が悪い.
2.2 Out-of-source Builds
逆にソースとビルドのディレクトリを分けるのがOut-of-souce Buildsである.
この本は今後この方法で解説する.
IDEは基本この方法を採用してbuildフォルダを分けられるようになっている.
この方法の利点は,コードとバイナリを分けられるだけでなく,条件ごとのビルドフォルダを構築できることである.
2.3 Generating Project Files
CMakeは,様々なプロジェクトファイルを生成することができる.
多くのプロジェクファイルの生成器はDebugやReleaseなどの複数の設定を生成できるMultiple Configurationをサポートしている.
もしも,Multiple Configurationに対応していればCMakeは一度に生成でき,対応していなければ複数回生成する必要がある.
生成器はプロジェクトファイルがどのように生成されるかテストする.
実際,この生成の過程ではconfiguringとgeneratingの二つが行われている.
configuringはCMakeLists.txtを読みすべてのプロジェクトファイルを生成するための内部表現を作成する過程である.
generatingは実際にプロジェクトファイルを作る過程である.
今はこの二つが分かれていることが重要ではないが,Chapter11で重要になる.
2.4 Running The Build Tool
ここまででIDEで扱うプロジェクトファイルができた.
さらに,CMakeでは通常はIDEを開いて行うビルドまでを行える.
実際に以下の様にするとMyAppのDebugビルドがなされる.
cmake --build /pathTo/build --config Debug --target MyApp
普通は,開発者は一種類のIDEで開発し他のIDEて動くかテストする.
しかし,CMakeを使えば開発した後コマンドで他のIDEでビルドが通るかテストできるのだ.
2.5 Recommended Practices
CMakeを始めるとき,最初からビルドディレクトリとコードディレクトリを分ける練習をすべきだ.
これは,同じソースから異なる環境でビルドできるようにするための良い練習になる.
初期の段階では,特定の生成器を使いたくなる.
しかし,プロジェクトがどんどん進むうちに異なる環境で対応したい,IDEを変えたいなどの需要が出てくる.
その時のために,初期のうちから生成器を変えながら開発することで将来の負債を削減することができる.
NinjaはCMakeの生成器で良い選択肢だ.
これは,様々な環境をサポートするうえCMakeと相性が良い.
感想
言葉は知っていても中身を知らないことが多く,勉強になる