【メイク】

Make とは?

💡 「何が変わった?」を見極めて、最短ルートでビルドしてくれる職人
📌 このページのポイント
Makeの差分ビルド Makefile ターゲット 依存関係 + コマンド $ make タイムスタンプ 変更あり? 依存ファイル比較 ソースファイル main.c 変更あり utils.c 変更なし lib.c 変更なし main.o のみ 再コンパイル 実行ファイル 変更あり → 再ビルド 変更なし → スキップ
Makeの差分ビルドのイメージ
ひよこ ひよこ

Makeって名前はシンプルだけど、何をしてくれるの?

ペンギン先生 ペンギン先生

ソースコードからプログラムを「作る(make)」のを自動化してくれるツールだよ。Makefileっていうレシピに「このファイルからこうやってビルドしてね」って書いておくと、コマンド一発でやってくれるんだ

ひよこ ひよこ

毎回全部コンパイルし直すの?ファイルがたくさんあると大変そう…

ペンギン先生 ペンギン先生

いい質問だね!Makeの賢いところは「差分ビルド」ができること。ファイルの更新日時を見て、変更があった部分だけを再ビルドするんだ。100個のファイルがあっても、1個だけ変えたらその1個に関係する部分だけコンパイルしてくれるよ

ひよこ ひよこ

Makefileってどんな感じで書くの?

ペンギン先生 ペンギン先生

ターゲット(作りたいファイル)、依存関係(材料)、コマンド(作り方)の3つを書くよ。料理レシピみたいに「カレーを作るには、肉と野菜とルーが必要で、手順はこう」って感じだね

ひよこ ひよこ

C言語以外でも使えるの?

ペンギン先生 ペンギン先生

もちろん!LaTeXのドキュメント生成、Dockerイメージのビルド、テストの実行、デプロイの自動化…何でもコマンドで表現できる作業ならMakeで自動化できるよ。実はGo言語のプロジェクトでもMakefileがよく使われてるんだ

ひよこ ひよこ

1976年って相当古いよね。まだ使われてるの?

ペンギン先生 ペンギン先生

今でもバリバリ現役だよ。LinuxカーネルのビルドもMakeだし、多くのオープンソースプロジェクトがMakefileを持ってる。ただし、Makefileのインデントにはタブ文字が必須という罠があって、スペースだとエラーになるんだ。これは初心者がハマるポイントとして有名だね

ひよこ ひよこ

タブとスペースの違いでエラーになるの!?それは怖い…

ペンギン先生 ペンギン先生

そうなんだ。1976年の設計がそのまま残ってる部分だね。最近はCMakeGradleみたいな後発のビルドツールも多いけど、Makeのシンプルさと汎用性は唯一無二。「迷ったらMakefile」は今でも通用する考え方だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Make」って出てきたら「Makefileに書いた手順通りに自動ビルドしてくれるツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Make」 = 作る・生成する
💬 「ソースコードからプログラムを作る(make)」というそのままの意味だよ。1976年にベル研究所のスチュアート・フェルドマンが開発したんだ
← 用語集にもどる