Makefile
という名前のファイルを作成
Makefile
内に次のように記述する
program : 事前用件 [TAB] レシピ
例えば
program : source [TAB] cat source > program
事前用件の数を増やすこともできる
source : source01 source02 source03 cat source01 source02 source03 > source
また、makeを引数を付けずに実行すると、一番上に書かれたルールが実行される。
引数としてターゲットを指定すると、そのターゲットのルールと、依存するルールが実行される。
ただし、ターゲットと同じファイル名が存在すると、ルールは実行されない。
変数
Makefile
内で変数を使うこともできる。
variable = foobar target : $(variable)
自動変数
$@
target : echo $@
このMakefileを実行すると次のようになる。
% make echo target
$<
target : A B C echo $<
このMakefileを実行すると次のようになる。
% make echo A
$^
target : A B C echo $^
このMakefileを実行すると次のようになる。
$ make echo A B C
自動変数の組み合わせ
target : prerequisite cat prerequisite > target
と書く代わりに次のように書ける。
target : prerequisite cat $< > $@
PHONYターゲット
PHONYターゲットとは、ファイル名を意味せず、単にレシピを実行するターゲット名としてのみ機能するターゲットのこと。
hi : echo hi hello : echo hello
これを実行すると次のようになる。
$ make echo hi hi
ちなみにmakeを引数を付けずに実行すると、一番上に書かれたルールが実行される。
また、引数としてターゲットを指定すると、そのターゲットのルールと、依存するルールが実行される。
$ make hi echo hi hi
$ make hello echo hello hello
ただし、ターゲットと同じファイル名が存在すると、
$ touch hello $ make hello make: 'hello' is up to date.
このように、ルールは実行されない。
hello : echo hello .PHONY : hello
Makefileテンプレ
gcc_options = -std=c++17 -Wall --pedantic-errors program : main.cpp all.h all.h.gch g++ $(gcc_options) -include all.h $< -o $@ all.h.gch : all.h g++ $(gcc_options) -x c++-header -o $@ $< run : program ./program clean : rm -f ./program rm -f ./all.h.gch .PHONY : run clean
参考
cpp-intro/002-build.md at master · EzoeRyou/cpp-intro · GitHub