本文へスキップ
BecomeCoder

Makefile / makeコース · 第1章 Makefileとは · レッスン3

デフォルトゴールとターゲット指定

ブラウザで完結

導入

Makefile には複数のルールを書けます。では make とだけ打ったとき、どのルールが動くのでしょう? 答えは「いちばん最初に書いたターゲット(デフォルトゴール)」です。特定のルールを動かしたいときは make ターゲット名 と指定します。

説明

2つのターゲットを持つ Makefile を見てみましょう。

all:
	echo "これが最初のターゲット = デフォルトゴール"

test:
	echo "make test で呼ばれる"
  • make … 引数なしなら、先頭の all が動く(デフォルトゴール)。
  • make test … 名前を指定すれば、その test が動く。
  • make all test … 複数指定すれば、順番に動く。

慣習として、先頭には all という「全部ビルドする」ターゲットを置くことが多いです。

やってみよう

makemake testmake all test をそれぞれ試して、動くルールがどう変わるか確かめましょう。ターゲットの順番を入れ替えて make すると、デフォルトゴールが変わることも確認してみてください。

演習

run というターゲットを追加して、make run としたときだけ running... と表示されるようにしましょう(make だけのときは run が動かないこと)。

ヒント1を見る

既存のターゲットの下に run: を足し、タブ字下げで echo "running..."

ヒント2を見る

run を先頭に置くと make だけで動いてしまいます。デフォルトゴールにしたくなければ後ろに書きます。

実際に動かしてみよう

上のエディタが Makefile、下が端末です。Makefile を確かめたら端末に `make` と打って Enter を押すと、どのレシピがどの順で走るかが表示されます。`ls` で作業中のファイル(main.c などが最初から置いてあります)、`touch main.c` のあと `make` で差分ビルドの様子、`make -n` で「実行せず何が走るか」を確かめられます。各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」でいつでも戻せます。

Makefile + make(シミュレート)

Makefile を書いて make を試せる学習用環境を読み込みます(本物のGNU Makeではなく、依存解決とタイムスタンプ再ビルドを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。