テキストファイルMakefileに必要なファイルと各ファイルのコンパイルのコマンド、ファイル間の依存関係を書いておくことで、自動的に一括でコンパイルしてくれる。
依存関係に基づいて、更新されたファイルのみをコンパイルしてくれるので、コンパイル時間が短くて済む
ファイルターゲット
make (作成するファイル名)
で指定したコマンドからファイルを作成する
すでにファイルが存在する場合は実行されない
filename: command [command]
(例)
hoge.txt: touch hoge.txt echo fuga >> hoge.txt
タスクターゲット
make taskname
でタスク実行。
[.PHONY: taskname] taskname: command [command]
(例)
.PHONY clean clean: rm *.txt rm *.o
.PHONYの行は省略できるが、ファイル作成とタスクを区別するためにつけたほうがいいらしい
ターゲットを指定せずmakeのみで実行した場合は先頭のタスクが実行される
ターゲットの依存関係
ターゲット名の:の後に依存するターゲットを記述することで依存するターゲットを実行してから目的のターゲットを実行できる
指定されたターゲットは依存ターゲットより更新日時が古かった場合
[.PHONY: taskname] tasknake: task1 [task2] [...] command [command]
依存タスクのみを実行する場合はセミコロンをつける。
依存タスクとコマンドのセパレータを意味する。
(例)
taskname : task1 task2;
変数
スペースを含む文字列を変数に代入できる。$(variable)または${variable}で参照
定義済みの変数、自動変数は以下を参照
http://www.wiki.os-project.jp/?Makefile#v25ce834
マクロ
- 置き換え参照
変数に指定した文字列の部分文字列の書換
\%はワイルドカードを意味する
(例)
source = hoge.c fuga.c object1 = $(source:%.c=%.o) object2 = $(source:%=lib/%.c)
オプション
\-n : 実行されるコマンドを表示
\-s : サイレントモード。コマンドの表示を行わない