Makefileも怖くない~Cmakeのすすめ~

今回はWSL(Windows Subsystem for Linux)でCmakeを利用したビルド環境構築をしたので
その手順をまとめてみました。
この記事は以下のような方におすすめです。

  • Makefileはよくわからない
  • CmakeをWSLで使いたい
  • 効率的にC++のビルド環境を構築したい

Cmake環境をWSLで構築しようと思った背景

普段はC++をよく使った開発をしているのですが、基本的には既にMakefileが用意されていて
ビルド環境が構築されていて自分で環境構築をしたことがなかったので
C++ビルド環境を構築してみたいと思ったのが主な理由です。
Makefileにも挑戦しましたがイマイチ上手くいかない部分もあり、Cmakeで環境構築しようと
思った次第です。

環境構築の準備

Cmakeのインストールについては既に完了している前提で話を進めていきます。
もし、インストールしていなければ「cmake インストール」で検索してみましょう。
環境構築するに辺り以下のビルドツリー構成で環境を構築します。

Directory Tree

.
├── CMakeLists.txt
├── bin
├── build
├── include
│   └── Calculation.hpp
├── src
│   ├── Calculation.cpp
│   └── main.cpp

hppとcppの内容は以下のような感じです。

Calculation.hpp

Calculation.cpp

main.cpp


Cmakeを使用するにあたってCMakeLists.txtというファイルの作成が必要です。
このファイルにビルドに必要な情報を書いていきます。
今回は以下の内容を設定してみました。

CMakeLists.txtの内容

内容を解説すると

  • 「cmake_minimum_required」で最低限要求するcmakeのバージョンを設定
  • 「file(GLOB SRC “./src/*.cpp」でsrc以下のファイルをSRC変数として設定
  • 「set(INC ./include)」でインクルードパスを設定
  • 「CMAKE_CXX_STANDARD」でC++の使用するバージョンを指定(ここではC++11を指定)
  • 「CMAKE_CXX_STANDARD_REQUIRED」で「CMAKE_CXX_STANDARD」の設定内容を反映
  • 「project」でプロジェクト名を指定
  • 「add_executable」で実行ファイル作成時のソースを指定(g++ main.cppの変わり)
  • 「include_directories」でインクルードディレクトリを設定(INC変数を展開)

※3つ目の項目についてはMakefileや手動でのビルド時に設定する「-I」で指定する内容だと
考えてもらうと理解が早いかもしれません。

ソースはファイルを直接指定も可能ですが個人的にはファイルを追加した際に手動での追加、
Cmakeのやり直しが必要になり、追加忘れなどが起きるのでなるべくその手間を省けるように
ワイルドカード指定を行っています。

コンパイル

さて、設定ファイルの作成が完了したところでいよいよ環境構築です。
まずは、以下のコマンドを実行しましょう。

  cd build
  cmake ..

問題がなければコマンドを実行するとbuildディレクトリ以下に
Makefileを含めたフォルダとファイルが作成されます。
エラーが発生した場合は内容をよく確認してCMakeLists.txtを修正しましょう。
余談ですがcmakeコマンドを使用した場所にMakefileやその他のファイルが作成されるので
今回のようにCMakeLists.txtと同じ階層にディレクトリを作成して作成したディレクトリの下で
cmakeコマンドを実行するのがおすすめです。

cmakeコマンドが無事に完了したらMakefileが作成されているはずなので
makeコマンドを実行しましょう。
設定に問題がなければ「add_executable」で設定した実行ファイルが作成されます。

実行結果

最後に

今回はCmakの環境構築を紹介しました。今回は実行ファイルを作成できる最低限の設定で
CMakeLists.txtを作成しましたが実際には様々な設定があります。
googleTest等ではinstallディレクトリを設定したりとインストールまで行える中々高度な物となっています。
是非使いこなして自宅のPC環境でのC++でのプログラミング機会も増やしていきたいところです。
Makefileがよくわからなくて挫折したという方にも是非試してもらいたいツールです。
みなさんもcmakeを使って簡単にビルド環境作っていきませんか?
それでは今回はこの辺で

Translate »