本文へスキップ
BecomeCoder

Makefile / makeコース · 第3章 パターンとテクニック · レッスン11

組み込み変数と make -n(ドライラン)

ブラウザで完結

導入

CC を自分で定義しなくても、make は最初から CC = cc を知っています。こうした組み込み変数を知っておくと、Makefile がさらに短くなります。あわせて、レシピを実行せずに「何が走るか」だけを確認する make -n を覚えましょう。壊す前に確認できる安全装置です。

説明

make には最初からいくつかの変数が入っています。

変数既定値用途
CCccCコンパイラ
CXXg++C++コンパイラ
RMrm -f削除コマンド

なので CC を定義しなくても $(CC) は使えます(上書きしたいときだけ書く)。

CFLAGS = -Wall -O2

app: main.c utils.c helper.c
	$(CC) $(CFLAGS) -o app main.c utils.c helper.c

make -n--dry-run)を使うと、レシピを実行せずに表示だけします。「この make で本当は何が走るのか?」を、ファイルを一切変えずに確認できます。大きなプロジェクトや clean を試す前の確認にとても便利です。

やってみよう

まず make -n を実行してください。cc -Wall -O2 -o app ... と表示されますが、ls してもまだ app はできていません(実行していないから)。次に make-n なし)で本当にビルド。CC を定義していないのに cc が使われているのは、組み込み変数のおかげです。

演習

make -n を実行して、実行はせずに cc -Wall -O2 -o app main.c utils.c helper.c というコマンドが表示だけされることを確認しましょう。

ヒント1を見る

$(CC) は組み込みで cc になります。自分で CC = を書かなくても動きます。

ヒント2を見る

-n を付けると表示のみ。lsapp がまだ無いことを確かめられます。

実際に動かしてみよう

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

Makefile + make(シミュレート)

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