RaspberryPiのサンプルプログラムをコンパイルするとき、WiringPiというライブラリを使用することもあって、
コンパイルオプションやファイル名を毎回コマンドラインに手入力するのは大変面倒です。
私は、テキストメモに記載したコンパイルの記述をコマンドラインにコピー&ペーストしていましたが、
そもそもコピペ元ファイルを開いて、マウスで操作すること自体も徐々に面倒になってきました。
その面倒さを解決するのがMakefileで、Makefileを作っておくとコマンド入力がかなり楽になります。
Makefileは、凝らなければ簡単に作成できますので、ここでは最小限のMakefileの書き方について解説していきます。
1.Makefileとは
そもそもMakefileとは何かというと、makeコマンドを使って、コンパイルを自動化するためのファイルです。
Makefileは、大規模なソフトウェアなら必ずと言ってよいほどあります。
例えばLinuxカーネルソースを見てみると、デバイスメーカー毎にソースファイルを変えたりする必要があります。
そのため、Makefileであらかじめ記述しておき、makeコマンドの引数で、
コンパイル対象を指定するだけで面倒なコンパイルオプションの入力が不要になります。
2.Makefileの書き方
Makefileの書き方は、コンパイルしたいファイルと同じフォルダに置く必要があります。
まずMakefileの最小限の記述の例として、
私が前回のLCD1602の調査解析の時に作ったMakefileはこんな感じです。
まずMakefileという名前でファイルを作成し、そのファイルを開きます。
# vi Makefile
Mが小文字のmakefileでもできますが、大文字にするのが一般的です。
何故一般的かというと、おそらく大文字にするとフォルダ内をlsで見た時に、
一番左上の方の位置になるのでMakefileがあることが簡単にわかるからだと思います。
話を戻して、Makefile内の書き方ですが、
先ほどの例で説明すると、まずmakeコマンド時の引数に指定する文字列(ターゲット)を書き、
コロン(;)の後にコンパイルしたいファイル名を書きます。この部分です。
この場合はファイルは1つですが、依存するファイルがあるならここのすべて書きます。
そして次の行に、実際にgccコマンドを使ったコンパイルするための文字列を書きます。
この部分です。
次にあらかじめ、makeコマンドによって生成した実行ファイルを削除するcleanも作っておきます。
この部分です。
cleanは、バイナリを削除したいのでコロン(;)の後は空白で、
2行目にrmコマンドで実行ファイルを削除する文字列を書きます。この部分です。
これでファイル保存して、最低限のMakefileの完成です。
Makefileは、gccやrmといったコマンドやシェルで使用できる文法が使えるので、
変数でコンパイルオプションを切り替えたりと簡単に作ることができます。
3.makeコマンドの実行
実行ファイルの生成と削除ができるMakefileを作成できたので、makeコマンドを実行します。
# make i2c_lcd1602
そうすると、こんな感じでi2c_lcd1602という名前で実行ファイルが作られます。
また、単に、
# make
とするだけでもできます。こんな感じです。
この場合は、clean以外のMakefileに記述されているターゲットが全てコンパイルされます。
次に実行ファイルの削除は、
# make clean
で、こんな感じです。
これで、gccコマンドに続く長い文字を打たなくても簡単にすることができました。
4.最後に
Makefileは、既に作られていたりするので自分で作るとなると、何も見ないで作ることはできませんでした。
今回は、最低限ということですごく簡単ですが、カーネルソースにあるMakefileを見てみると、
いろんなベンダーやデバイスに対応する必要があるので、Makefileがかなり複雑になっていることがわかります。
Makefileについて、もっと知りたい方はGNU Make 第3版が参考になると思います。
<関連・おすすめ記事>
RaspberryPi (ラズパイ)の購入時に最低限必要なものとおすすめセット - 水瓶座列車
Raspberry Pi (ラズパイ)で役に立つ書籍のおすすめランキングベスト5 - 水瓶座列車
Bluetoothでマルチペアリング(複数台接続)できるマウスのおすすめランキングベスト5 - 水瓶座列車
Bluetoothでマルチペアリング(複数台接続)できるキーボードのおすすめランキングベスト5 - 水瓶座列車
Linux勉強用の中古パソコンおすすめショップランキング - 水瓶座列車