LoginSignup
2
0

More than 5 years have passed since last update.

分からない人に読んで欲しい! 超ざっくりMakefile

Posted at

何の話?

Makefileについて超ざっくり説明したもの。

「Makefileが分からん」
「解説を読んでもやっぱり良く分からん」

という人に読んで欲しい(私がそうだった・・・今でも分からんことは多いが)。

Makefileって何?

「作りたいもの」、「材料」、「作り方」が書かれたファイル。
イメージは料理のレシピ。

書き方は?

超ざっくり以下のように書けば良い。
「作り方」の前にはスペースではなくタブを入力。

Makefile
作りたいもの: 材料
        作り方

例えば「hello.cからhelloというプログラムを作りたい」という場合は以下のようになる。

超ざっくり用語 今回の例
作りたいもの プログラム(hello)
材料 ソースコード(hello.c)
作り方 ビルドコマンド
Makefile
hello: hello.c
        gcc -o hello hello.c

上のMakefileを3行でまとめるとこんな感じ。

  • helloを作る時の材料はhello.cだよ
  • 作り方は「gcc -o hello hello.c」だよ
  • 材料が揃ったら作り方を実行してね

Makefileが出来上がったらmakeコマンドを実行するとhelloが作られる。

材料が足りない時は?

前述の通り、Makefileでは材料がそろってから作り方が実行される。
ただし、作りたいものの材料は揃っていないことだってある。
そういう時は「材料の作り方」も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実行時にどういう挙動になるのかをまとめてみる。

  1. helloの材料はhello.o
  2. hello.oという材料は存在しないのでhelloの作り方は実行できない
  3. Makefileの中にhello.oの作り方が書いてないか探す
  4. hello.oの材料はhello.cと書いてある
  5. hello.cは存在するのでhello.oの作り方(gcc -c hello.c)を実行する
  6. hello.oが出来上がった
  7. ようやくhelloの材料が揃ったのでhelloの作り方(gcc -o hello hello.o)を実行する
  8. helloが出来上がる

おわりに

Makefileについてイメージしやすい言葉で書いたつもりですが、いかがだったでしょうか。
Makefileを勉強していて「ターゲット」、「依存ファイル」と言われても中々覚えられなかった
私ですが、料理のレシピをイメージすると理解しやすかったので、同じように悩んでいる人の
役に立てればと思い、書いてみました。

Makefileに詳しい人から「違うぞ!」と怒られそうですが、
分からない人向けなので勘弁してください m(_ _)m

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0