何の話?
Makefileについて超ざっくり説明したもの。
「Makefileが分からん」
「解説を読んでもやっぱり良く分からん」
という人に読んで欲しい(私がそうだった・・・今でも分からんことは多いが)。
Makefileって何?
「作りたいもの」、「材料」、「作り方」が書かれたファイル。
イメージは料理のレシピ。
書き方は?
超ざっくり以下のように書けば良い。
「作り方」の前にはスペースではなくタブを入力。
作りたいもの: 材料
作り方
例えば「hello.cからhelloというプログラムを作りたい」という場合は以下のようになる。
超ざっくり用語 | 今回の例 |
---|---|
作りたいもの | プログラム(hello) |
材料 | ソースコード(hello.c) |
作り方 | ビルドコマンド |
hello: hello.c
gcc -o hello hello.c
上のMakefileを3行でまとめるとこんな感じ。
- helloを作る時の材料はhello.cだよ
- 作り方は「gcc -o hello hello.c」だよ
- 材料が揃ったら作り方を実行してね
Makefileが出来上がったらmakeコマンドを実行するとhelloが作られる。
材料が足りない時は?
前述の通り、Makefileでは材料がそろってから作り方が実行される。
ただし、作りたいものの材料は揃っていないことだってある。
そういう時は「材料の作り方」もMakefileに書いてあげる。
ということで、さきほどのMakefileを少しだけ変えて説明する。
hello: hello.o
gcc -o hello hello.o
hello.o: hello.c
gcc -c hello.c
helloの材料がhello.cからhello.oに変わった。
当初はhello.cからhelloを作りたかったので、hello.oという材料はない。
この場合、make実行時にどういう挙動になるのかをまとめてみる。
- helloの材料はhello.o
- hello.oという材料は存在しないのでhelloの作り方は実行できない
- Makefileの中にhello.oの作り方が書いてないか探す
- hello.oの材料はhello.cと書いてある
- hello.cは存在するのでhello.oの作り方(gcc -c hello.c)を実行する
- hello.oが出来上がった
- ようやくhelloの材料が揃ったのでhelloの作り方(gcc -o hello hello.o)を実行する
- helloが出来上がる
おわりに
Makefileについてイメージしやすい言葉で書いたつもりですが、いかがだったでしょうか。
Makefileを勉強していて「ターゲット」、「依存ファイル」と言われても中々覚えられなかった
私ですが、料理のレシピをイメージすると理解しやすかったので、同じように悩んでいる人の
役に立てればと思い、書いてみました。
Makefileに詳しい人から「違うぞ!」と怒られそうですが、
分からない人向けなので勘弁してください m(_ _)m