水瓶座列車

どこまで行けるか、とりあえず発車します。

最小限のMakefileの書き方を解説

f:id:aquarius999:20190528175006p:plain
 

 

 

 

RaspberryPiのサンプルプログラムをコンパイルするとき、

WiringPiというライブラリを使用することもあって、

コンパイルオプションやファイル名を毎回コマンドラインに手入力するのは大変面倒です。

私は、いつもコピペしていました。

そしてコピペもコピペ元を開いて、マウスで操作するのですが段々面倒になってきたのです。

 

そこで、Makefileの登場です。

その面倒さを解決するには、Makefileを作っておくとかなり楽になります。

凝らなければ簡単なので、Makefileの書き方について解説していきます。

 

 

 

 

 

  1.Makefileとは

 

そもそもMakefileとは何かというと、makeコマンドを使って、

コンパイルを自動化するためのファイルです。

Makefileは、大規模なソフトウェアなら必ずと言ってよいほどあります。

例えばLinuxカーネルソースを見てみると、

バイスメーカー毎にソースファイルを変えたりする必要があります。

そのため、Makefileであらかじめ記述しておき、makeコマンドの引数で、

コンパイル対象を指定するだけで面倒なコンパイルオプションの入力が不要になります。

 

 

  2.Makefileの書き方

 

Makefileの書き方は、コンパイルしたいファイルと同じフォルダに置く必要があります。

まずMakefileの最小限の記述の例として、

私が前回のLCD1602の調査解析の時に作ったMakefileはこんな感じです。 

f:id:aquarius999:20190528163852p:plain

 

 まずMakefileという名前でファイルを作成し、そのファイルを開きます。

# vi Makefile

 

Mが小文字のmakefileでもできますが、大文字にするのが一般的です。

何故一般的かというと、おそらく大文字にするとフォルダ内をlsで見た時に、

一番左上の方の位置になるのでMakefileがあることが簡単にわかるからだと思います。

 

話を戻して、Makefile内の書き方ですが、

先ほどの例で説明すると、まずmakeコマンド時の引数に指定する文字列(ターゲット)を書き、

コロン(;)の後にコンパイルしたいファイル名を書きます。この部分です。

f:id:aquarius999:20190528165155p:plain

 

この場合はファイルは1つですが、依存するファイルがあるならここのすべて書きます。

 

そして次の行に、実際にgccコマンドを使ったコンパイルするための文字列を書きます。

この部分です。

f:id:aquarius999:20190528165213p:plain

 

次にあらかじめ、makeコマンドによって生成した実行ファイルを削除するcleanも作っておきます。

この部分です。

f:id:aquarius999:20190528165229p:plain

 

cleanは、バイナリを削除したいのでコロン(;)の後は空白で、

2行目にrmコマンドで実行ファイルを削除する文字列を書きます。この部分です。 

f:id:aquarius999:20190528165243p:plain

 

これでファイル保存して、最低限のMakefileの完成です。

 

Makefileは、gccやrmといったコマンドやシェルで使用できる文法が使えるので、

変数でコンパイルオプションを切り替えたりと簡単に作ることができます。 

 

  3.makeコマンドの実行

 

実行ファイルの生成と削除ができるMakefileを作成できたので、makeコマンドを実行します。 

# make i2c_lcd1602

 

そうすると、こんな感じでi2c_lcd1602という名前で実行ファイルが作られます。

f:id:aquarius999:20190528170818p:plain

 

また、単に、

# make

とするだけでもできます。こんな感じです。

f:id:aquarius999:20190528170858p:plain

 

この場合は、clean以外のMakefileに記述されているターゲットが全てコンパイルされます。

 

次に実行ファイルの削除は、

# make clean

で、こんな感じです。

f:id:aquarius999:20190528170948p:plain

 

これで、gccコマンドに続く長い文字を打たなくても簡単にすることができました。

 

  4.最後に

 

Makefileは、既に作られていたりするので自分で作るとなると、

何も見ないで作ることはできませんでした。

今回は、最低限ということですごく簡単ですが、カーネルソースにあるMakefileを見てみると、

いろんなベンダーやデバイスに対応する必要があるので、

Makefileがかなり複雑になっていることがわかります。

Makefileについて、もっと知りたい方はGNU Make 第3版が参考になると思います。  

 

 

関連・おすすめ記事

Raspberry Pi 3B+ にRaspbianをインストールする手順 - 水瓶座列車

RaspberryPi (ラズパイ)の購入時に最低限必要なものとおすすめセット - 水瓶座列車

Raspberry Pi (ラズパイ)で役に立つ書籍のおすすめランキングベスト5 - 水瓶座列車

Bluetoothでマルチペアリング(複数台接続)できるマウスのおすすめランキングベスト5 - 水瓶座列車