Makefile
Linux系なら追加package不要で使えるmakeコマンドの設定ファイル 結構便利
使い方
name:でコマンドを定義
$ make nameで実行できるようになる
実行したいcommandを次の行に書く
先頭にタブを入れること
別のコマンドをそのまま使いたいときは、コマンド定義の:の後ろにそのコマンドを書く
,区切りで複数指定できる
code:1(Makefile)
name:
command A
name2: name
command B
構文上の意味
code:txt
<name>: <requires>
<command>
<name>は「作成したいファイル」と見なされる
つまり、make <name>は「<name>というファイルを作成しろ」という意味
<requires>には、<name>の作成に必要なファイルを空白区切りで並べる
もし<requires>に書かれたファイルが存在しないか、それらの作成に必要なファイルより作成日時が古ければ、それらのファイルを再帰的に作成する
<command>には<name>を作成するためのコマンドを書く
makeは<command>を実行すれば<name>を作成できると解釈する
実際に作成されたかは確認しない
ここが重要
このことを元に、次のmakefileの挙動を見る
code:makefile
all: main
main: compile sub
echo "Hello!"
mainではHello!を表示するが、mainというファイルは作らない
そのため、常にmainが存在しないという判定を受けるため、allを実行するごとにmainが走る
別のコマンドをそのまま使いたいときは、コマンド定義の:の後ろにそのコマンドを書くと動く仕組みがこれ
compileとsubも同様に同名ファイルを作らないため、mainを実行するたびに実行されることになる
code:makefile
compile: main.o lib.o
gcc -o main.exe main.o lib.o
main.o: main.c
gcc -c main.o
lib.o: lib.c
gcc -c lib.o
main.oは同名ファイルを生成するため、新規作成時かmain.cが更新されたときのみ実行される
cacheを保持してビルド時間を短縮する効果を得ていると思えば良い lib.oも同様
code:makefile
sub:
echo "world!"
必要なファイル及びコマンドが無いときは、:の後は空欄にする
このときはsub:; echo "world!"と1行に短縮することもできる