技術は楽するために

日々の開発で作ったプログラムの一部を公開していきます。

超簡単なmakefile 第1回

今日から、Makefile(GNUMakefile)の書き方について連載で更新していこうかと思います。
初心者の方でも理解できるように丁寧に書いていくつもりです。
最終目標は、「このシリーズを1通り読めばMakefileを知らなかった人でも1通りMakefileが書ける段階までたどり着けること」とします。

 

そもそもMakefileって?

 コンパイルに必要なコマンド、ファイル、ファイルの参照パス、オプション、依存関係などを
書き込んだファイルです。
このファイルを使って、makeコマンドを実行することで、コンパイルを実施します。
一度Makefileをつくってしまえば、コンパイルの手間を大幅に減らすことができます。
また、差分コンパイルが可能で、ファイル修正後再コンパイルをする時間を短縮するメリットもあります。
 

Makefileのサンプル

ソースコードSample.cppをコンパイルし、実行ファイルを生成するためのMakeifleのサンプルを示します。

何が便利か?

Makefileが便利な点を実例を示しながら、説明します。
前提として、ディレクトリ階層は以下のイメージ。
 ─HogeProject
│ ├─src
│ │   ├─Sample.cpp
│ │   ├─Makefile
│ ├─inc  

①Makeifleを使わないコンパイル
 
まずは、Makefileを使わないコンパイルをやってみます。
コンパイル対象のソースであるSanple.cppがある階層で以下の通りコマンドを実行。
$ g++ -std=c++0x  -I../inc -c Sample.cpp; g++ -o Sample Sample.o
 
プログラムの規模が小さいので、それほど面倒ではないですが、それでも一回一回手打ちでコンパイルするのは、かなりの手間です。 
 
②Makeifleを使ったコンパイル
 
同じことをMakeifleを使ってやってみます。
Sanple.cppと同階層にMakeifileを配置して、以下の通りコマンドを実行。
$ make
 
以上!!
 
もう違いは、あきらかだと思いますが、Makefileは実際書くのは、結構面倒ですが、一度書いてしまえば
コンパイルの手間が圧倒的に減りミスも少なくなります。
特に、大きなプログラムであれば有るほどこの恩恵は大きいです。
 
次回は、Makefileの記述ルールを今回使ったMakefileのサンプルをもとに説明もう少し詳しく説明しようかと思います。