makeMakefile

make とは,複数のファイルの依存関係を記述することによって,プ ログラムをコンパイルして生成するためなどに使われる.makeは, ファイルの修正時刻をチェックし,修正されたファイルに依存した部分に 関するコンパイル等だけを実行する依存関係は,通常 Makefile と いう名前のファイルに記述される.

Makefile には,

   目的となるもの: 目的のため必要なファイル(複数記述可)
   [タブ]	実行すること
という形式で記述される.「実行すること」の手前には必ずタブが必要で ある.例えば,
   all: server client

   server: server.o
      gcc -o server server.o

   client: client.o		 
      gcc -o client client.o

   server.o: server.c
      gcc -Wall -g -c server.c

   client.o: client.c
      gcc -Wall -g -c client.c
このような Makefile を用意しておけば,
   % make
とするだけで適切なコンパイルが行われる.また,client.cのみを修正し た場合はclientのみコンパイルを行ない,common.hを修正した場合 はclientserverともにコンパイルを行なう,といった依存関係の チェックを自動的に行なってくれる.もし,client.cserver.cで, 同一のヘッダファイルcommon.hを利用している場合は,client.oserver.oの両方がこのヘッダファイルに依存することになる.この場合は, 例えば,
   server.o: server.c common.h
      gcc -Wall -g -c server.c

   client.o: client.c common.h
      gcc -Wall -g -c client.c
などとすれば,common.hを編集した際に両方を再度コンパイルしてくれる.

さらに,このように書くこともできる.

   CC = gcc

   all: server client

   server: server.o
      $(CC) -o $@ $^

   client: client.o	 
      $(CC) -o $@ $^

   server.o: server.c common.h
   client.o: client.c common.h

   .c.o:
      $(CC) -Wall -g -c $^

   clean:
      rm -f server client server.o client.o
このとき,makeコマンドに引数cleanを渡して,
   % make clean
とすると,最後のclean の部分が実行され,コンパイル時に生成されるファ イルを消去することができる.
NAKAZAWA Koji
2014-09-30