導入
make の世界はすべて「ルール」でできています。ルールは3つの部品からなります。ターゲット・依存関係(prerequisites)・レシピ。この3つの関係が分かれば、Makefile の8割は読めるようになります。
説明
ルールの一般形はこうです。
build: main.c
echo "コンパイルします: main.c"
図にするとこうなります。
flowchart LR P["依存: main.c"] --> T["ターゲット: build"] T --> R["レシピ: echo ..."]
- ターゲット(
build): このルールで作りたいもの/実行したい名前。コロン:の左。 - 依存関係(
main.c): ターゲットを作るのに必要なファイル。コロンの右。 - レシピ(
echo ...): ターゲットを作る手順。タブ字下げで、依存がそろってから実行される。
make build(または先頭ターゲットなので単に make)とすると、make はまず依存の main.c があるか確認し、あればレシピを実行します。main.c は最初から用意されているので、レシピが動きます。
やってみよう
make を実行してレシピが走るのを確認しましょう。次に cat main.c で依存ファイルの中身も覗いてみてください。依存に、存在しない nofile.c を書いて make するとどうなるかも試してみましょう(「ルールがありません」と怒られます)。
演習
ターゲット名を compile、依存を utils.c、レシピを echo "utils.c をコンパイル" にしたルールを書き、make で実行してみましょう。
ヒント1を見る
compile: utils.c と書き、次の行をタブ字下げして echo "utils.c をコンパイル"。
ヒント2を見る
utils.c はこの端末に最初から置いてあります(ls で確認できます)。