【めいくふぁいる】

Makefile とは?

最終更新:
💡 材料と作り方を伝えて、必要なところを作り直す

Makefileは、makeが読み込む、ターゲット・前提となるファイル・実行するコマンドを記述した手順書。GNU makeでは、ファイルの有無や更新時刻などを見て、必要な処理を進める。

📌 このページのポイント
Makefile:材料から成果物へmain.cを変更した例main.cmain.outil.cutil.oapp変更あり作り直す変更なしなら再利用再リンクルールに書いた材料と更新時刻で判断
矢印は材料から成果物への流れです。コンパイルやリンクは、ルールのコマンドが行います。
ひよこ ひよこ
Dockerfileと同じものなの?
ペンギン先生 ペンギン先生
Makefileはmakeに処理の手順や依存関係を伝えるファイルだよ。Dockerfileがコンテナのイメージを作る手順なのに対し、Makefileはプログラムのビルドや、テストなどのコマンドをまとめる用途に使えるんだ。
ひよこ ひよこ
どんなルールを書くの?
ペンギン先生 ペンギン先生
たとえばapp: main.o util.oなら、appを作る前提がmain.oとutil.oだと伝えるよ。その下に、作るためのコマンドを書く。通常のコマンド行の先頭はスペースでなくタブなので、エディターの設定も確認しよう。
ひよこ ひよこ
全部作り直すの?
ペンギン先生 ペンギン先生
GNU makeでは、成果物がない場合や、前提のファイルが成果物より新しい場合などに作り直すよ。たとえばmain.cを変えたらmain.oを更新し、その結果を使うappも更新する。ほかの材料が変わっていなければ、その部分は省けるんだ。
ひよこ ひよこ
内容の違いを自動で全部見つけるの?
ペンギン先生 ペンギン先生
基本の判断はファイルの更新時刻などだよ。ファイルの内容を毎回比較するわけではないし、書いていない依存関係まで自動で全部分かるわけでもない。必要な材料や手順を正しく記述することが大切なんだ。
ひよこ ひよこ
テストの実行にも使える?
ペンギン先生 ペンギン先生
使えるよ。ファイルを作る目的でないターゲットは、.PHONYでその名前を指定する方法がある。同じ名前のファイルがあっても処理を実行できるようにするんだ。Makefileがコマンドをまとめ、実際の作業は呼び出す道具が行うと考えよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Makefile」って出てきたら「makeに材料と作り方を伝える手順書」と思えばだいたいOK!
📖 おまけ:英語の意味
「Makefile」 = makeの手順を記述するファイル
💬 makeは「作る」、fileは「ファイル」。Makefileはよく使う名前で、GNU makeはGNUmakefileやmakefileも探す。-fで別の名前を指定することもできるよ。

参考資料

← 用語集にもどる