makeとMakefile


makeとは

 makeとは、複数のファイルを組み合わせて、 目的のファイルを生成する作業を楽にするためのソフトです。 そのための手順をMakefileに書きます。 たとえば、src1.c, src2.c, defs.h を組み合わせてmainを作る場合を考えます。 defs.hsrc1.c, src2.cの両方で読み込まれています。 手作業でコンパイルすると、


  cc -c src1.c
  cc -c src2.c
  cc -o main src1.o src2.o
のようになります。

 これを毎回やるだけでも面倒ですが、 ソースの一部だけを変更した際にどうすれば最小の手間でコンパイルできるのかを 考えるのはもっと面倒です。 たとえば、src1.cだけを書き換えた場合は、


  cc -c src1.c
  cc -o main src1.o src2.o
になります。 defs.hだけを書き換えた場合は、

  cc -c src1.c
  cc -c src2.c
  cc -o main src1.o src2.o
のように、全てを再コンパイルすることになります。


makeを使う

 まず、以下のMakefileを作ります。


all: main

src1.o: src1.c defs.h
	cc -c src1.c

src2.o: src2.c defs.h
	cc -c src2.c

main: src1.o src2.o
	cc -o main src1.o src2.o
コンパイルする場合には、単に

  make
とするだけです。


最も簡単なMakefile

 最も簡単なMakefileは、


ターゲット: ソース
	コマンド
のようになります。 ターゲットソースより古い時に コマンドを実行します。 ソースは、空白で区切って複数書くことができます。 コマンドも、複数行書くことができます。 ソースコマンドは省略することもできます。 ソースを省略すると、必ずコマンドを実行します。


マクロ (変数)

 マクロ (変数) を使うことができます。 たとえば、


CC = gcc
CFLAGS = -O -I../defs

test: test.c
	$(CC) $(CFLAGS) -c test.c
のようになります。


(作成: 2002年10月10日, 最終更新: 2002年10月10日)