make コマンドは, 実は C や C++ のソースプログラムから実行プログラムを作製する方法を最初から知っています. このため, 一つのソースプログラムから一つの実行プログラムを作成するような場合は, Makefile において手続き(コマンド)の記述を省略することができます.
CFLAGS = -I/usr/X11R6/include LIBS = -L/usr/X11R6/lib -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthread all: prog1 prog2 prog1: prog1.c --Tab-->$(CC) $(CFLAGS) prog1.c -o prog1 $(LIBS) prog2: prog2.c --Tab-->$(CC) $(CFLAGS) prog2.c -o prog2 $(LIBS)
すなわち, 上のような Makefile は下のように書くこともできます.
CFLAGS = -I/usr/X11R6/include LDFLAGS = -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthread all: prog1 prog2 prog1: prog1.c prog2: prog2.c
CFLAGS = -I/usr/X11R6/include LDLIBS = -L/usr/X11R6/lib -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthread all: prog1 prog2 prog1: prog1.c prog2: prog2.c
さらに, 実行プログラムのファイル名がソースプログラムのファイル名から拡張子 (.c) を取り除いたものであれば(prog1.c から prog1 を生成する場合など), それらの依存関係も省略することができます.
CFLAGS = -I/usr/X11R6/include LDFLAGS = -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthread all: prog1 prog2
CFLAGS = -I/usr/X11R6/include LDLIBS = -L/usr/X11R6/lib -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthread all: prog1 prog2
また, 上の CFLAGS や LDFLAGS あるいは LDLIBS のような「マクロ」は, 環境変数で与えることもできます.
% setenv CFLAGS -I/usr/X11R6/include % setenv LDFLAGS '-lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthread'
あるいは,
% setenv CFLAGS -I/usr/X11R6/include % setenv LDLIBS '-L/usr/X11R6/lib -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthrad'
というコマンドをシェル(この場合は csh/tcsh)であらかじめ実行しておけば (もちろん, これは .cshrc に入れておくことができます), Makefile は次のような依存関係だけになります.
all: prog1 prog2
もし, 生成する実行プログラムを make コマンドの引数に指定するなら, 上の Makefile すら不要です.
% make prog1 prog2
カレントディレクトリに prog1.c と prog2.c というソースプログラムがあれば, Makefile を作成しなくても, 上のコマンド一発で prog1 と prog2 が作成されます.